<?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>133543</bug_id>
          
          <creation_ts>2014-06-05 03:00:52 -0700</creation_ts>
          <short_desc>[CSS Grid Layout] Simplify the named grid lines resolution algorithm</short_desc>
          <delta_ts>2014-06-10 03:24:52 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bjonesbe</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>stavila</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1013502</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-05 03:00:52 -0700</bug_when>
    <thetext>The support for placing grid items using named grid lines was added in r164869 and later improved in r166299. Despite being correct the code turned out to be quite complex. It&apos;s difficult to understand and maintain. It can be heavily simplified if we previously insert the implicit named grid lines generated by grid areas into the list of user-defined named grid lines. If we do that we could directly apply the algorithm described in the spec http://dev.w3.org/csswg/css-grid/#grid-placement-slot

As a nice side effect, we&apos;ll get for free the use case specified in section &quot;5.2.2 Implicit Named Areas&quot;, i.e., explicitly adding named lines of the form (foo-start/foo-end) will effectively create a named grid area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013505</commentid>
    <comment_count>1</comment_count>
      <attachid>232536</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-05 04:03:46 -0700</bug_when>
    <thetext>Created attachment 232536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013513</commentid>
    <comment_count>2</comment_count>
      <attachid>232536</attachid>
    <who name="Radu Stavila">stavila</who>
    <bug_when>2014-06-05 05:40:03 -0700</bug_when>
    <thetext>Comment on attachment 232536
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:2684
&gt; +        if (!namedGridAreas.isEmpty())

I don&apos;t think this condition is necessary. It would be faster to just let it through with the call to createImplicitNamedGridLinesFromGridArea, as it won&apos;t fork the code path and it would return immediately anyway.

&gt; Source/WebCore/css/StyleResolver.cpp:2711
&gt; +        if (!namedGridAreas.isEmpty())

Ditto.

&gt; Source/WebCore/rendering/RenderGrid.cpp:868
&gt; +    return lineName + ((side == ColumnStartSide || side == RowStartSide) ? &quot;-start&quot; : &quot;-end&quot;);

For consistency, I think you should add an isStartSide(GridPositionSide) method, similar to isColumnSide.

&gt; Source/WebCore/rendering/RenderGrid.cpp:980
&gt; +        // First attempt to match the grid areaâs edge to a named grid area: if there is a named line with the name

&quot;â&quot; character instead of &apos;

It shows up multiple times in the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013562</commentid>
    <comment_count>3</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-05 09:44:20 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #2)
&gt; (From update of attachment 232536 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=232536&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:2684
&gt; &gt; +        if (!namedGridAreas.isEmpty())
&gt; 
&gt; I don&apos;t think this condition is necessary. It would be faster to just let it through with the call to createImplicitNamedGridLinesFromGridArea, as it won&apos;t fork the code path and it would return immediately anyway.

I am not sure that is true, I don&apos;t think there is a unique answer for that as it depends a lot on the branch-prediction features of the CPU architecture and so on.

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:868
&gt; &gt; +    return lineName + ((side == ColumnStartSide || side == RowStartSide) ? &quot;-start&quot; : &quot;-end&quot;);
&gt; 
&gt; For consistency, I think you should add an isStartSide(GridPositionSide) method, similar to isColumnSide.

Good point.
 
&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:980
&gt; &gt; +        // First attempt to match the grid areaâs edge to a named grid area: if there is a named line with the name
&gt; 
&gt; &quot;â&quot; character instead of &apos;
&gt; 
&gt; It shows up multiple times in the comments.

Weird likely some issue copy-pasting. I&apos;ll fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013569</commentid>
    <comment_count>4</comment_count>
      <attachid>232559</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-05 09:54:37 -0700</bug_when>
    <thetext>Created attachment 232559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013575</commentid>
    <comment_count>5</comment_count>
      <attachid>232559</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-05 10:08:48 -0700</bug_when>
    <thetext>Comment on attachment 232559
Patch

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

I’ll say review+, but the use of a vector and a std::sort each time we add something is definitely not the right data structure / algorithm choice.

&gt; Source/WebCore/css/StyleResolver.cpp:1862
&gt; +    for (auto it = namedGridAreas.begin(), end = namedGridAreas.end(); it != end; ++it) {

This should use a modern for loop:

    for (auto&amp; area : namedGridAreas)

Then below instead of &quot;it-&gt;&quot; it would be &quot;area.&quot;

&gt; Source/WebCore/css/StyleResolver.cpp:1868
&gt; +        {
&gt; +            NamedGridLinesMap::AddResult startResult = namedGridLines.add(it-&gt;key + &quot;-start&quot;, Vector&lt;size_t&gt;());
&gt; +            startResult.iterator-&gt;value.append(areaSpan.initialPositionIndex);
&gt; +            std::sort(startResult.iterator-&gt;value.begin(), startResult.iterator-&gt;value.end());
&gt; +        }

This code only uses the value, so I would write more like this:

    auto&amp; startVector = namedGridLines.add(it-&gt;key + &quot;-start&quot;, Vector&lt;size_t&gt;()).iterator-&gt;value;
    startVector.append(areaSpan.initialPositionIndex);
    std::sort(vector.begin(), vector.end());

But also, to keep a vector sorted, it is *not* efficient to use keep adding items to the end and then doing a std::sort on the whole vector each time. There are webpages telling you not to do this, such as &lt;http://stackoverflow.com/questions/2710221/is-there-a-sorted-vector-class-which-supports-insert-etc&gt;. Please rethink the data structure here.

I also don’t understand the reason for the use of size_t for this. Is it the size of some memory object? If not, then it should be some other type, maybe unsigned or even uint64_t.

&gt; Source/WebCore/css/StyleResolver.cpp:1873
&gt; +        {
&gt; +            NamedGridLinesMap::AddResult endResult = namedGridLines.add(it-&gt;key + &quot;-end&quot;, Vector&lt;size_t&gt;());
&gt; +            endResult.iterator-&gt;value.append(areaSpan.finalPositionIndex + 1);
&gt; +            std::sort(endResult.iterator-&gt;value.begin(), endResult.iterator-&gt;value.end());
&gt; +        }

Same comment again.

&gt; Source/WebCore/css/StyleResolver.cpp:2776
&gt; +        NamedGridLinesMap namedGridColumnLines = state.style()-&gt;namedGridColumnLines();
&gt; +        NamedGridLinesMap namedGridRowLines = state.style()-&gt;namedGridRowLines();

This looks kind of expensive. Do we really want to copy hash maps here?

&gt; Source/WebCore/rendering/RenderGrid.cpp:988
&gt; +        const String namedGridLine = position.namedGridLine();

Not sure why this is &quot;const String&quot; instead of just String.

&gt; Source/WebCore/rendering/RenderGrid.cpp:992
&gt; +        auto implicitLineIter = gridLineNames.find(implicitNamedGridLineForSide(namedGridLine, side));

The use of &quot;xxxIter&quot; here is not a normal naming style we use in WebKit. I think you could just leave off the Iter suffix, or use the entire word Iterator, or think of another way to name it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013576</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-05 10:10:08 -0700</bug_when>
    <thetext>For example, if the only reason for sorting is that we always want to be able to find the first item, then what we want is a heap, and STL has heap algorithms for us to use to maintain the heap (std::push_heap and friends).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013593</commentid>
    <comment_count>7</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-05 10:31:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 232559 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=232559&amp;action=review
&gt; 
&gt; I’ll say review+, but the use of a vector and a std::sort each time we add something is definitely not the right data structure / algorithm choice.
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:1862
&gt; &gt; +    for (auto it = namedGridAreas.begin(), end = namedGridAreas.end(); it != end; ++it) {
&gt; 
&gt; This should use a modern for loop:
&gt; 
&gt;     for (auto&amp; area : namedGridAreas)
&gt; 
&gt; Then below instead of &quot;it-&gt;&quot; it would be &quot;area.&quot;

I had thought about that but I needed both the key and the value and I didn&apos;t remember the KeyValuePair thing :)

&gt; &gt; Source/WebCore/css/StyleResolver.cpp:1868
&gt; &gt; +        {
&gt; &gt; +            NamedGridLinesMap::AddResult startResult = namedGridLines.add(it-&gt;key + &quot;-start&quot;, Vector&lt;size_t&gt;());
&gt; &gt; +            startResult.iterator-&gt;value.append(areaSpan.initialPositionIndex);
&gt; &gt; +            std::sort(startResult.iterator-&gt;value.begin(), startResult.iterator-&gt;value.end());
&gt; &gt; +        }
&gt; 
&gt; This code only uses the value, so I would write more like this:
&gt; 
&gt;     auto&amp; startVector = namedGridLines.add(it-&gt;key + &quot;-start&quot;, Vector&lt;size_t&gt;()).iterator-&gt;value;
&gt;     startVector.append(areaSpan.initialPositionIndex);
&gt;     std::sort(vector.begin(), vector.end());
&gt; 
&gt; But also, to keep a vector sorted, it is *not* efficient to use keep adding items to the end and then doing a std::sort on the whole vector each time. There are webpages telling you not to do this, such as &lt;http://stackoverflow.com/questions/2710221/is-there-a-sorted-vector-class-which-supports-insert-etc&gt;. Please rethink the data structure here.

I know, ideally we&apos;d be using a std::set but std:: data types are not allowed in the project, aren&apos;t they?

&gt; I also don’t understand the reason for the use of size_t for this. Is it the size of some memory object? If not, then it should be some other type, maybe unsigned or even uint64_t.

It&apos;s just an index, as we don&apos;t expect grids to be extremely huge I guess it would be more than enough to have an unsigned there, but I&apos;d change it in a different patch.

&gt; &gt; Source/WebCore/css/StyleResolver.cpp:1873
&gt; &gt; +        {
&gt; &gt; +            NamedGridLinesMap::AddResult endResult = namedGridLines.add(it-&gt;key + &quot;-end&quot;, Vector&lt;size_t&gt;());
&gt; &gt; +            endResult.iterator-&gt;value.append(areaSpan.finalPositionIndex + 1);
&gt; &gt; +            std::sort(endResult.iterator-&gt;value.begin(), endResult.iterator-&gt;value.end());
&gt; &gt; +        }
&gt; 
&gt; Same comment again.
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:2776
&gt; &gt; +        NamedGridLinesMap namedGridColumnLines = state.style()-&gt;namedGridColumnLines();
&gt; &gt; +        NamedGridLinesMap namedGridRowLines = state.style()-&gt;namedGridRowLines();
&gt; 
&gt; This looks kind of expensive. Do we really want to copy hash maps here?

No, we don&apos;t but the style returns a const reference, so there is no other way to change it than to do a copy+set() unless we add something like mutableNamedGridColumnLines(). I thought about that but there is only one method in the whole RenderStyle like that, so it seems that is really uncommon.
 
&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:988
&gt; &gt; +        const String namedGridLine = position.namedGridLine();
&gt; 
&gt; Not sure why this is &quot;const String&quot; instead of just String.

No particular reason.
 
&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:992
&gt; &gt; +        auto implicitLineIter = gridLineNames.find(implicitNamedGridLineForSide(namedGridLine, side));
&gt; 
&gt; The use of &quot;xxxIter&quot; here is not a normal naming style we use in WebKit. I think you could just leave off the Iter suffix, or use the entire word Iterator, or think of another way to name it.

Will change that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013598</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-05 10:51:04 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; For example, if the only reason for sorting is that we always want to be able to find the first item, then what we want is a heap, and STL has heap algorithms for us to use to maintain the heap (std::push_heap and friends).

Unfortunately that&apos;s not the case. We need to keep all the indexes sorted.

Another option could be to perform all the insertions and then in another loop do a single sort per vector.

In any case, although I totally agree that the usage is not correct, in practice those vectors won&apos;t be very bug I&apos;d say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014378</commentid>
    <comment_count>9</comment_count>
      <attachid>232559</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-10 02:15:42 -0700</bug_when>
    <thetext>Comment on attachment 232559
Patch

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

&gt;&gt;&gt; Source/WebCore/css/StyleResolver.cpp:1868
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; This code only uses the value, so I would write more like this:
&gt;&gt; 
&gt;&gt;     auto&amp; startVector = namedGridLines.add(it-&gt;key + &quot;-start&quot;, Vector&lt;size_t&gt;()).iterator-&gt;value;
&gt;&gt;     startVector.append(areaSpan.initialPositionIndex);
&gt;&gt;     std::sort(vector.begin(), vector.end());
&gt;&gt; 
&gt;&gt; But also, to keep a vector sorted, it is *not* efficient to use keep adding items to the end and then doing a std::sort on the whole vector each time. There are webpages telling you not to do this, such as &lt;http://stackoverflow.com/questions/2710221/is-there-a-sorted-vector-class-which-supports-insert-etc&gt;. Please rethink the data structure here.
&gt;&gt; 
&gt;&gt; I also don’t understand the reason for the use of size_t for this. Is it the size of some memory object? If not, then it should be some other type, maybe unsigned or even uint64_t.
&gt; 
&gt; I know, ideally we&apos;d be using a std::set but std:: data types are not allowed in the project, aren&apos;t they?

Also note that we only insert 1 item and sort each vector once. As we iterate over grid areas with different names, we&apos;ll be accessing different vectors all the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014383</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-06-10 03:24:52 -0700</bug_when>
    <thetext>Committed r169744: &lt;http://trac.webkit.org/changeset/169744&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232536</attachid>
            <date>2014-06-05 04:03:46 -0700</date>
            <delta_ts>2014-06-05 09:54:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133543-20140605130320.patch</filename>
            <type>text/plain</type>
            <size>31664</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNiZTZlZmYyY2NhZDdi
ODQzZmZhNWJiYTdhMGRlMjk0NzY1Nzc5OS4uNDg1ZTI3NzIyOWY3YzNhMTQwYWQ0ZGQyNmIxNTM2
OTNhYjhjMTg2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA2LTA1ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFNpbXBsaWZ5IHRoZSBuYW1lZCBncmlkIGxpbmVzIHJlc29sdXRpb24gYWxnb3Jp
dGhtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOYW1l
ZCBncmlkIGxpbmVzIHJlc29sdXRpb24gYWxnb3JpdGhtIGNhbiBiZSBoZWF2aWx5IHNpbXBsaWZp
ZWQgYnkKKyAgICAgICAgaW5zZXJ0aW5nIHRoZSBpbXBsaWNpdCBuYW1lZCBncmlkIGxpbmVzIGdl
bmVyYXRlZCBieSBlYWNoIGdyaWQKKyAgICAgICAgYXJlYSAoPGFyZWEtbmFtZT4te3N0YXJ0fGVu
ZH0gZm9yIHJvd3MgYW5kIGNvbHVtbnMpLCBpbnRvIHRoZSBsaXN0CisgICAgICAgIG9mIHVzZXIg
ZGVmaW5lZCBuYW1lZCBncmlkIGxpbmVzLiBUaGlzIHdheSB3ZSB3b3VsZCBvbmx5IGhhdmUgdG8K
KyAgICAgICAgZGVhbCB3aXRoIG5hbWVkIGdyaWQgbGluZXMgYW5kIGZvcmdldCBhYm91dCB0aGUg
bmFtZWQgZ3JpZCBhcmVhcworICAgICAgICAoYXMgZGVzY3JpYmVkIGluIHRoZSBzcGVjcworICAg
ICAgICBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtZ3JpZC8jZ3JpZC1wbGFjZW1lbnQtc2xv
dCkuCisKKyAgICAgICAgQXMgYSBuaWNlIHNpZGUgZWZmZWN0LCB3ZSdsbCBnZXQgZm9yIGZyZWUg
dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZQorICAgICAgICB1c2UgY2FzZSBkZXNjcmliZWQgaW4g
c2VjdGlvbiA1LjIuMiBJbXBsaWNpdCBOYW1lZCBBcmVhcy4KKworICAgICAgICBUZXN0OiBmYXN0
L2Nzcy1ncmlkLWxheW91dC9uYW1lZC1ncmlkLWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1hcmVhcy1k
eW5hbWljLWdldC1zZXQuaHRtbAorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJl
YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpncmlk
TGluZXNGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmltcGxpY2l0TmFtZWRHcmlkTGluZUZv
clNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnJlc29sdmVOYW1lZEdyaWRMaW5l
UG9zaXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cmVzb2x2
ZUdyaWRQb3NpdGlvbkZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpy
ZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Z3JpZExpbmVEZWZpbmVkQmVmb3JlR3JpZEFyZWEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6c2V0TmFtZWRMaW5lUG9zaXRpb25JZkRlZmluZWRCZWZvcmVBcmVh
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFkanVzdE5hbWVkR3Jp
ZEl0ZW1Qb3NpdGlvbik6IERlbGV0ZWQuCisKIDIwMTQtMDYtMDMgIEJlbmphbWluIFBvdWxhaW4g
IDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBzb21lIGNvcm5lciBjYXNlcyBv
ZiA6aG92ZXIgYW5kIDphY3RpdmUgaW4gcXVpcmtzIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAppbmRleCBmY2Q0MGMyZGUyM2NlMGViOTBhMmZiZGM0OWIyMmRhNmY3MmQwN2Yz
Li5kYWU4YjIwOTFjZjYwMDE0YTc4NWVmMDk0NDU4ODJkYjNlNzI0M2I0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAiUHNldWRv
RWxlbWVudC5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKICNpbmNsdWRlICJSZWN0LmgiCisj
aW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1
ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmgi
CkBAIC0xODU2LDYgKzE4NTcsMjMgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVs
ZXMoKQogfQogCiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKK3N0YXRpYyB2b2lkIGNyZWF0
ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEoY29uc3QgTmFtZWRHcmlkQXJlYU1h
cCYgbmFtZWRHcmlkQXJlYXMsIE5hbWVkR3JpZExpbmVzTWFwJiBuYW1lZEdyaWRMaW5lcywgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBu
YW1lZEdyaWRBcmVhcy5iZWdpbigpLCBlbmQgPSBuYW1lZEdyaWRBcmVhcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIEdyaWRTcGFuIGFyZWFTcGFuID0gZGlyZWN0aW9uID09IEZv
clJvd3MgPyBpdC0+dmFsdWUucm93cyA6IGl0LT52YWx1ZS5jb2x1bW5zOworICAgICAgICB7Cisg
ICAgICAgICAgICBOYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IHN0YXJ0UmVzdWx0ID0gbmFt
ZWRHcmlkTGluZXMuYWRkKGl0LT5rZXkgKyAiLXN0YXJ0IiwgVmVjdG9yPHNpemVfdD4oKSk7Cisg
ICAgICAgICAgICBzdGFydFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGFyZWFTcGFuLmlu
aXRpYWxQb3NpdGlvbkluZGV4KTsKKyAgICAgICAgICAgIHN0ZDo6c29ydChzdGFydFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYmVnaW4oKSwgc3RhcnRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmVuZCgp
KTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBOYW1lZEdyaWRMaW5lc01hcDo6
QWRkUmVzdWx0IGVuZFJlc3VsdCA9IG5hbWVkR3JpZExpbmVzLmFkZChpdC0+a2V5ICsgIi1lbmQi
LCBWZWN0b3I8c2l6ZV90PigpKTsKKyAgICAgICAgICAgIGVuZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGFyZWFTcGFuLmZpbmFsUG9zaXRpb25JbmRleCArIDEpOworICAgICAgICAgICAg
c3RkOjpzb3J0KGVuZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYmVnaW4oKSwgZW5kUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHN0YXRpYyBib29s
IGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIEdyaWRMZW5ndGgmIHdvcmtpbmdM
ZW5ndGgpCiB7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVXZWJraXRNaW5Db250ZW50KSB7CkBAIC0yNjYyLDYgKzI2ODAsMTAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgT3JkZXJlZE5hbWVkR3JpZExpbmVzTWFwIG9yZGVyZWROYW1lZEdyaWRMaW5lczsK
ICAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBuYW1l
ZEdyaWRMaW5lcywgb3JkZXJlZE5hbWVkR3JpZExpbmVzLCBzdGF0ZSkpCiAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0g
c3RhdGUuc3R5bGUoKS0+bmFtZWRHcmlkQXJlYSgpOworICAgICAgICBpZiAoIW5hbWVkR3JpZEFy
ZWFzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNG
cm9tR3JpZEFyZWEobmFtZWRHcmlkQXJlYXMsIG5hbWVkR3JpZExpbmVzLCBGb3JDb2x1bW5zKTsK
KwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQ29sdW1uTGluZXMobmFtZWRHcmlkTGlu
ZXMpOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGlu
ZXMob3JkZXJlZE5hbWVkR3JpZExpbmVzKTsKQEAgLTI2ODUsNiArMjcwNywxMCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICBPcmRlcmVkTmFtZWRHcmlkTGluZXNNYXAgb3JkZXJlZE5hbWVkR3JpZExp
bmVzOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMs
IG5hbWVkR3JpZExpbmVzLCBvcmRlcmVkTmFtZWRHcmlkTGluZXMsIHN0YXRlKSkKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJl
YXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCk7CisgICAgICAgIGlmICghbmFtZWRH
cmlkQXJlYXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY3JlYXRlSW1wbGljaXROYW1lZEdyaWRM
aW5lc0Zyb21HcmlkQXJlYShuYW1lZEdyaWRBcmVhcywgbmFtZWRHcmlkTGluZXMsIEZvclJvd3Mp
OworCiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdyaWRMaW5lcyk7
CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhvcmRl
cmVkTmFtZWRHcmlkTGluZXMpOwpAQCAtMjc0MywxMCArMjc2OSwxOSBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgQ1NTR3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRlVmFsdWUgPSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFs
dWUodmFsdWUpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRU
ZW1wbGF0ZVZhbHVlLT5ncmlkQXJlYU1hcCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TmFtZWRHcmlkQXJlYVJvd0NvdW50KGdyaWRUZW1wbGF0ZVZhbHVlLT5yb3dDb3VudCgpKTsKLSAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1w
bGF0ZVZhbHVlLT5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNW
YWx1ZSogZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFy
ZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Z3JpZEFyZWFNYXAoKTsKKworICAgICAgICBO
YW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRDb2x1bW5MaW5lcyA9IHN0YXRlLnN0eWxlKCktPm5h
bWVkR3JpZENvbHVtbkxpbmVzKCk7CisgICAgICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3Jp
ZFJvd0xpbmVzID0gc3RhdGUuc3R5bGUoKS0+bmFtZWRHcmlkUm93TGluZXMoKTsKKyAgICAgICAg
Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShuZXdOYW1lZEdyaWRBcmVh
cywgbmFtZWRHcmlkQ29sdW1uTGluZXMsIEZvckNvbHVtbnMpOworICAgICAgICBjcmVhdGVJbXBs
aWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKG5ld05hbWVkR3JpZEFyZWFzLCBuYW1lZEdy
aWRSb3dMaW5lcywgRm9yUm93cyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3Jp
ZENvbHVtbkxpbmVzKG5hbWVkR3JpZENvbHVtbkxpbmVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TmFtZWRHcmlkUm93TGluZXMobmFtZWRHcmlkUm93TGluZXMpOworCisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Z3Jp
ZEFyZWFNYXAoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFSb3dD
b3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLT5yb3dDb3VudCgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFs
dWUtPmNvbHVtbkNvdW50KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8qIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAKaW5kZXggMjFiYzI4ZTFiYjk4YmEwMTg2ZGNiMWM0YmFkODQxMGFlNWI4NWFjMS4uY2I4
OGJkYzU2NDg1M2VhNmIzNzA5ZTIzNzY5ODgwMjczN2Y4ZDJkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtODU4LDY5ICs4NTgsMjAgQEAgR3JpZFNwYW4gUmVu
ZGVyR3JpZDo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNv
bnN0IFJlbmRlckIKICAgICByZXR1cm4gR3JpZFNwYW4oaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFs
UG9zaXRpb24pOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZ3JpZExpbmVEZWZpbmVkQmVmb3Jl
R3JpZEFyZWEoc2l6ZV90IG5hbWVkR3JpZExpbmVGaXJzdERlZmluaXRpb24sIGNvbnN0IEdyaWRD
b29yZGluYXRlJiBncmlkQXJlYUNvb3JkaW5hdGVzLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCitz
dGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewotICAgIHN3
aXRjaCAoc2lkZSkgewotICAgIGNhc2UgQ29sdW1uU3RhcnRTaWRlOgotICAgICAgICByZXR1cm4g
bmFtZWRHcmlkTGluZUZpcnN0RGVmaW5pdGlvbiA8IGdyaWRBcmVhQ29vcmRpbmF0ZXMuY29sdW1u
cy5pbml0aWFsUG9zaXRpb25JbmRleDsKLSAgICBjYXNlIENvbHVtbkVuZFNpZGU6Ci0gICAgICAg
IHJldHVybiBuYW1lZEdyaWRMaW5lRmlyc3REZWZpbml0aW9uIDwgZ3JpZEFyZWFDb29yZGluYXRl
cy5jb2x1bW5zLmZpbmFsUG9zaXRpb25JbmRleDsKLSAgICBjYXNlIFJvd1N0YXJ0U2lkZToKLSAg
ICAgICAgcmV0dXJuIG5hbWVkR3JpZExpbmVGaXJzdERlZmluaXRpb24gPCBncmlkQXJlYUNvb3Jk
aW5hdGVzLnJvd3MuaW5pdGlhbFBvc2l0aW9uSW5kZXg7Ci0gICAgY2FzZSBSb3dFbmRTaWRlOgot
ICAgICAgICByZXR1cm4gbmFtZWRHcmlkTGluZUZpcnN0RGVmaW5pdGlvbiA8IGdyaWRBcmVhQ29v
cmRpbmF0ZXMucm93cy5maW5hbFBvc2l0aW9uSW5kZXg7Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNDb2x1bW5TaWRlKHNp
ZGUpID8gc3R5bGUubmFtZWRHcmlkQ29sdW1uTGluZXMoKSA6IHN0eWxlLm5hbWVkR3JpZFJvd0xp
bmVzKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldE5hbWVkTGluZVBvc2l0aW9uSWZEZWZpbmVkQmVm
b3JlQXJlYShHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYg
bmFtZWRMaW5lc01hcCwgY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwgY29uc3QgR3JpZENvb3JkaW5h
dGUmIGdyaWRBcmVhQ29vcmRpbmF0ZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorc3RhdGljIGlu
bGluZSBjb25zdCBTdHJpbmcgaW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShjb25zdCBTdHJp
bmcmIGxpbmVOYW1lLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7Ci0gICAgYXV0byBsaW5lc0l0
ZXJhdG9yID0gbmFtZWRMaW5lc01hcC5maW5kKGxpbmVOYW1lKTsKLSAgICBpZiAobGluZXNJdGVy
YXRvciA9PSBuYW1lZExpbmVzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXpl
X3QgbmFtZWRHcmlkTGluZUZpcnN0RGVmaW5pdGlvbiA9IEdyaWRQb3NpdGlvbjo6YWRqdXN0R3Jp
ZFBvc2l0aW9uRm9yU2lkZShsaW5lc0l0ZXJhdG9yLT52YWx1ZVswXSwgc2lkZSk7Ci0gICAgaWYg
KGdyaWRMaW5lRGVmaW5lZEJlZm9yZUdyaWRBcmVhKG5hbWVkR3JpZExpbmVGaXJzdERlZmluaXRp
b24sIGdyaWRBcmVhQ29vcmRpbmF0ZSwgc2lkZSkpCi0gICAgICAgIHBvc2l0aW9uLnNldEV4cGxp
Y2l0UG9zaXRpb24oMSwgbGluZU5hbWUpOworICAgIHJldHVybiBsaW5lTmFtZSArICgoc2lkZSA9
PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9PSBSb3dTdGFydFNpZGUpID8gIi1zdGFydCIgOiAi
LWVuZCIpOwogfQogCi12b2lkIFJlbmRlckdyaWQ6OmFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlv
bihHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpIGNvbnN0Citz
dGF0aWMgYm9vbCBpc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGlu
ZU5hbWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQog
ewotICAgIC8vIFRoZSBTdHlsZUJ1aWxkZXIgYWx3YXlzIHRyZWF0cyA8Y3VzdG9tLWlkZW50PiBh
cyBhIG5hbWVkIGdyaWQgYXJlYS4gV2UgbXVzdCBkZWNpZGUgaGVyZSBpZiB0aGV5IGFyZSBnb2lu
ZyB0byBiZQotICAgIC8vIHJlc29sdmVkIHRvIGVpdGhlciBhIGdyaWQgYXJlYSBvciBhIGdyaWQg
bGluZS4KLSAgICBBU1NFUlQocG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkpOwotICAgIGNvbnN0
IE5hbWVkR3JpZEFyZWFNYXAmIGdyaWRBcmVhTWFwID0gc3R5bGUoKS5uYW1lZEdyaWRBcmVhKCk7
Ci0gICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIG5hbWVkTGluZXNNYXAgPSBpc0NvbHVtblNp
ZGUoc2lkZSkgPyBzdHlsZSgpLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZSgpLm5hbWVk
R3JpZFJvd0xpbmVzKCk7Ci0KLSAgICBTdHJpbmcgbmFtZWRHcmlkQXJlYU9yR3JpZExpbmUgPSBw
b3NpdGlvbi5uYW1lZEdyaWRMaW5lKCk7Ci0gICAgYm9vbCBpc1N0YXJ0U2lkZSA9IHNpZGUgPT0g
Q29sdW1uU3RhcnRTaWRlIHx8IHNpZGUgPT0gUm93U3RhcnRTaWRlOwotCi0gICAgYXV0byBhcmVh
SXRlcmF0b3IgPSBncmlkQXJlYU1hcC5maW5kKG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lKTsKLSAg
ICBpZiAoYXJlYUl0ZXJhdG9yICE9IGdyaWRBcmVhTWFwLmVuZCgpKSB7Ci0gICAgICAgIFN0cmlu
ZyBncmlkTGluZU5hbWUgPSBuYW1lZEdyaWRBcmVhT3JHcmlkTGluZSArIChpc1N0YXJ0U2lkZSA/
ICItc3RhcnQiIDogIi1lbmQiKTsKLSAgICAgICAgc2V0TmFtZWRMaW5lUG9zaXRpb25JZkRlZmlu
ZWRCZWZvcmVBcmVhKHBvc2l0aW9uLCBuYW1lZExpbmVzTWFwLCBncmlkTGluZU5hbWUsIGFyZWFJ
dGVyYXRvci0+dmFsdWUsIHNpZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9v
bCBoYXNTdGFydFN1ZmZpeCA9IG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lLmVuZHNXaXRoKCItc3Rh
cnQiKTsKLSAgICBib29sIGhhc0VuZFN1ZmZpeCA9IG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lLmVu
ZHNXaXRoKCItZW5kIik7Ci0gICAgaWYgKChoYXNTdGFydFN1ZmZpeCAmJiBpc1N0YXJ0U2lkZSkg
fHwgKGhhc0VuZFN1ZmZpeCAmJiAhaXNTdGFydFNpZGUpKSB7Ci0gICAgICAgIHNpemVfdCBzdWZm
aXhMZW5ndGggPSBoYXNTdGFydFN1ZmZpeCA/IHN0cmxlbigiLXN0YXJ0IikgOiBzdHJsZW4oIi1l
bmQiKTsKLSAgICAgICAgU3RyaW5nIGdyaWRBcmVhTmFtZSA9IG5hbWVkR3JpZEFyZWFPckdyaWRM
aW5lLnN1YnN0cmluZygwLCBuYW1lZEdyaWRBcmVhT3JHcmlkTGluZS5sZW5ndGgoKSAtIHN1ZmZp
eExlbmd0aCk7Ci0KLSAgICAgICAgYXV0byBhcmVhSXRlcmF0b3IgPSBncmlkQXJlYU1hcC5maW5k
KGdyaWRBcmVhTmFtZSk7Ci0gICAgICAgIGlmIChhcmVhSXRlcmF0b3IgIT0gZ3JpZEFyZWFNYXAu
ZW5kKCkpIHsKLSAgICAgICAgICAgIHBvc2l0aW9uLnNldE5hbWVkR3JpZEFyZWEoZ3JpZEFyZWFO
YW1lKTsKLSAgICAgICAgICAgIHNldE5hbWVkTGluZVBvc2l0aW9uSWZEZWZpbmVkQmVmb3JlQXJl
YShwb3NpdGlvbiwgbmFtZWRMaW5lc01hcCwgbmFtZWRHcmlkQXJlYU9yR3JpZExpbmUsIGFyZWFJ
dGVyYXRvci0+dmFsdWUsIHNpZGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKG5hbWVkTGluZXNNYXAuY29udGFpbnMobmFtZWRHcmlkQXJlYU9yR3Jp
ZExpbmUpKQotICAgICAgICBwb3NpdGlvbi5zZXRFeHBsaWNpdFBvc2l0aW9uKDEsIG5hbWVkR3Jp
ZEFyZWFPckdyaWRMaW5lKTsKLSAgICBlbHNlCi0gICAgICAgIHBvc2l0aW9uLnNldEF1dG9Qb3Np
dGlvbigpOworICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZU5hbWVzID0gZ3Jp
ZExpbmVzRm9yU2lkZShzdHlsZSwgc2lkZSk7CisgICAgcmV0dXJuICFncmlkTGluZU5hbWVzLmNv
bnRhaW5zKGltcGxpY2l0TmFtZWRHcmlkTGluZUZvclNpZGUobGluZU5hbWUsIHNpZGUpKSAmJiAh
Z3JpZExpbmVOYW1lcy5jb250YWlucyhsaW5lTmFtZSk7CiB9CiAKIHZvaWQgUmVuZGVyR3JpZDo6
YWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShHcmlkUG9zaXRpb24mIGluaXRpYWxQb3NpdGlv
biwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIGluaXRpYWxQ
b3NpdGlvblNpZGUsIEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNpZGUpIGNvbnN0CkBA
IC05MzIsMTEgKzg4MywxNCBAQCB2b2lkIFJlbmRlckdyaWQ6OmFkanVzdEdyaWRQb3NpdGlvbnNG
cm9tU3R5bGUoR3JpZFBvc2l0aW9uJiBpbml0aWFsUG9zaXRpb24sIEdyaQogICAgIGlmIChpbml0
aWFsUG9zaXRpb24uaXNTcGFuKCkgJiYgZmluYWxQb3NpdGlvbi5pc1NwYW4oKSkKICAgICAgICAg
ZmluYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKIAotICAgIGlmIChpbml0aWFsUG9zaXRp
b24uaXNOYW1lZEdyaWRBcmVhKCkpCi0gICAgICAgIGFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlv
bihpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNpZGUpOworICAgIC8vIFRyeSB0byBl
YXJseSBkZXRlY3QgdGhlIGNhc2Ugb2Ygbm9uIGV4aXN0aW5nIG5hbWVkIGdyaWQgbGluZXMuIFRo
aXMgd2F5IHdlIGNvdWxkIGFzc3VtZSBsYXRlciB0aGF0CisgICAgLy8gUmVuZGVyR3JpZDo6cmVz
b2x2ZUdyaXNQb3NpdGlvbkZyb21TdHlsZSgpIHdvbid0IHJlcXVpcmUgdGhlIGF1dG9wbGFjZW1l
bnQgdG8gcnVuLCBpLmUuLCBpdCdsbCBhbHdheXMgcmV0dXJuIGEKKyAgICAvLyB2YWxpZCByZXNv
bHZlZCBwb3NpdGlvbi4KKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgp
ICYmIGlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3Jp
ZExpbmUoKSwgc3R5bGUoKSwgaW5pdGlhbFBvc2l0aW9uU2lkZSkpCisgICAgICAgIGluaXRpYWxQ
b3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKIAotICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzTmFt
ZWRHcmlkQXJlYSgpKQotICAgICAgICBhZGp1c3ROYW1lZEdyaWRJdGVtUG9zaXRpb24oZmluYWxQ
b3NpdGlvbiwgZmluYWxQb3NpdGlvblNpZGUpOworICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzTmFt
ZWRHcmlkQXJlYSgpICYmIGlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoZmluYWxQb3NpdGlv
bi5uYW1lZEdyaWRMaW5lKCksIHN0eWxlKCksIGZpbmFsUG9zaXRpb25TaWRlKSkKKyAgICAgICAg
ZmluYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEdy
aWRTcGFuPiBSZW5kZXJHcmlkOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBS
ZW5kZXJCb3gqIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBj
b25zdApAQCAtOTgyLDcgKzkzNiw3IEBAIHNpemVfdCBSZW5kZXJHcmlkOjpyZXNvbHZlTmFtZWRH
cmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zCiB7CiAgICAg
QVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOwogCi0gICAgY29uc3Qg
TmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc05hbWVzID0gaXNDb2x1bW5TaWRlKHNpZGUpID8g
c3R5bGUoKS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUoKS5uYW1lZEdyaWRSb3dMaW5l
cygpOworICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNOYW1lcyA9IGdyaWRM
aW5lc0ZvclNpZGUoc3R5bGUoKSwgc2lkZSk7CiAgICAgTmFtZWRHcmlkTGluZXNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZ3JpZExpbmVzTmFtZXMuZmluZChwb3NpdGlvbi5uYW1lZEdyaWRMaW5l
KCkpOwogICAgIGlmIChpdCA9PSBncmlkTGluZXNOYW1lcy5lbmQoKSkgewogICAgICAgICBpZiAo
cG9zaXRpb24uaXNQb3NpdGl2ZSgpKQpAQCAtMTAyMywyMCArOTc3LDI2IEBAIHNpemVfdCBSZW5k
ZXJHcmlkOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IEdyaWRQb3NpdGlvbiYg
cG9zaXRpb24sIEdyCiAgICAgfQogICAgIGNhc2UgTmFtZWRHcmlkQXJlYVBvc2l0aW9uOgogICAg
IHsKLSAgICAgICAgTmFtZWRHcmlkQXJlYU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZSgp
Lm5hbWVkR3JpZEFyZWEoKS5maW5kKHBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSk7Ci0gICAgICAg
IC8vIFVua25vd24gZ3JpZCBhcmVhIHNob3VsZCBoYXZlIGJlZW4gY29tcHV0ZWQgdG8gJ2F1dG8n
IGJ5IG5vdy4KLSAgICAgICAgQVNTRVJUKGl0ICE9IHN0eWxlKCkubmFtZWRHcmlkQXJlYSgpLmVu
ZCgpKTsKLSAgICAgICAgY29uc3QgR3JpZENvb3JkaW5hdGUmIGdyaWRBcmVhQ29vcmRpbmF0ZSA9
IGl0LT52YWx1ZTsKLSAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQ29sdW1u
U3RhcnRTaWRlOgotICAgICAgICAgICAgcmV0dXJuIGdyaWRBcmVhQ29vcmRpbmF0ZS5jb2x1bW5z
LmluaXRpYWxQb3NpdGlvbkluZGV4OwotICAgICAgICBjYXNlIENvbHVtbkVuZFNpZGU6Ci0gICAg
ICAgICAgICByZXR1cm4gZ3JpZEFyZWFDb29yZGluYXRlLmNvbHVtbnMuZmluYWxQb3NpdGlvbklu
ZGV4OwotICAgICAgICBjYXNlIFJvd1N0YXJ0U2lkZToKLSAgICAgICAgICAgIHJldHVybiBncmlk
QXJlYUNvb3JkaW5hdGUucm93cy5pbml0aWFsUG9zaXRpb25JbmRleDsKLSAgICAgICAgY2FzZSBS
b3dFbmRTaWRlOgotICAgICAgICAgICAgcmV0dXJuIGdyaWRBcmVhQ29vcmRpbmF0ZS5yb3dzLmZp
bmFsUG9zaXRpb25JbmRleDsKLSAgICAgICAgfQorICAgICAgICAvLyBGaXJzdCBhdHRlbXB0IHRv
IG1hdGNoIHRoZSBncmlkIGFyZWHigJlzIGVkZ2UgdG8gYSBuYW1lZCBncmlkIGFyZWE6IGlmIHRo
ZXJlIGlzIGEgbmFtZWQgbGluZSB3aXRoIHRoZSBuYW1lCisgICAgICAgIC8vICcnPGN1c3RvbS1p
ZGVudD4tc3RhcnQgKGZvciBncmlkLSotc3RhcnQpIC8gPGN1c3RvbS1pZGVudD4tZW5kJycgKGZv
ciBncmlkLSotZW5kKSwgY29udHJpYnV0ZXMgdGhlIGZpcnN0IHN1Y2gKKyAgICAgICAgLy8gbGlu
ZSB0byB0aGUgZ3JpZCBpdGVt4oCZcyBwbGFjZW1lbnQuCisgICAgICAgIGNvbnN0IFN0cmluZyBu
YW1lZEdyaWRMaW5lID0gcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpOworICAgICAgICBBU1NFUlQo
IWlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEobmFtZWRHcmlkTGluZSwgc3R5bGUoKSwgc2lk
ZSkpOworCisgICAgICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZU5hbWVzID0g
Z3JpZExpbmVzRm9yU2lkZShzdHlsZSgpLCBzaWRlKTsKKyAgICAgICAgYXV0byBpbXBsaWNpdExp
bmVJdGVyID0gZ3JpZExpbmVOYW1lcy5maW5kKGltcGxpY2l0TmFtZWRHcmlkTGluZUZvclNpZGUo
bmFtZWRHcmlkTGluZSwgc2lkZSkpOworICAgICAgICBpZiAoaW1wbGljaXRMaW5lSXRlciAhPSBn
cmlkTGluZU5hbWVzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdyaWRQb3NpdGlvbjo6YWRq
dXN0R3JpZFBvc2l0aW9uRm9yU2lkZShpbXBsaWNpdExpbmVJdGVyLT52YWx1ZVswXSwgc2lkZSk7
CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhIG5hbWVkIGxpbmUgd2l0aCB0
aGUgc3BlY2lmaWVkIG5hbWUsIGNvbnRyaWJ1dGVzIHRoZSBmaXJzdCBzdWNoIGxpbmUgdG8gdGhl
IGdyaWQKKyAgICAgICAgLy8gaXRlbeKAmXMgcGxhY2VtZW50LgorICAgICAgICBhdXRvIGV4cGxp
Y2l0TGluZUl0ZXIgPSBncmlkTGluZU5hbWVzLmZpbmQobmFtZWRHcmlkTGluZSk7CisgICAgICAg
IGlmIChleHBsaWNpdExpbmVJdGVyICE9IGdyaWRMaW5lTmFtZXMuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gR3JpZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGV4cGxpY2l0
TGluZUl0ZXItPnZhbHVlWzBdLCBzaWRlKTsKKworICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBh
Ym92ZSB3b3JrcyBzcGVjcyBtYW5kYXRlIHVzIHRvIHRyZWF0IGl0IGFzIGF1dG8gQlVUIHdlIHNo
b3VsZCBoYXZlIGRldGVjdGVkIGl0IGJlZm9yZSBjYWxsaW5nCisgICAgICAgIC8vIHRoaXMgZnVu
Y3Rpb24gaW4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoKS4gV2Ugc2hvdWxkIGJlIGNv
dmVyZWQgYW55d2F5IGJ5IHRoZSBBU1NFUlQgYXQgdGhlIGJlZ2lubmluZworICAgICAgICAvLyBv
ZiB0aGlzIGNhc2UgYmxvY2suCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC0xMDgxLDcgKzEwNDEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
R3JpZFNwYW4+IFJlbmRlckdyaWQ6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0
T3Bwb3NpdAogICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBhcmUgbm90IGFsbG93ZWQgcGVyIHRo
ZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgZHVyaW5nIHBhcnNp
bmcuCiAgICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpID4gMCk7CiAKLSAgICBjb25z
dCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVzTmFtZXMgPSBpc0NvbHVtblNpZGUoc2lkZSkg
PyBzdHlsZSgpLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZSgpLm5hbWVkR3JpZFJvd0xp
bmVzKCk7CisgICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc05hbWVzID0gZ3Jp
ZExpbmVzRm9yU2lkZShzdHlsZSgpLCBzaWRlKTsKICAgICBOYW1lZEdyaWRMaW5lc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBncmlkTGluZXNOYW1lcy5maW5kKHBvc2l0aW9uLm5hbWVkR3JpZExp
bmUoKSk7CiAKICAgICAvLyBJZiB0aGVyZSBpcyBubyBuYW1lZCBncmlkIGxpbmUgb2YgdGhhdCBu
YW1lLCB3ZSByZXNvbHZlIHRoZSBwb3NpdGlvbiB0byAnYXV0bycgKHdoaWNoIGlzIGVxdWl2YWxl
bnQgdG8gJ3NwYW4gMScgaW4gdGhpcyBjYXNlKS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyMTZhYTgxMjA2ZDk5NWVkMWJm
N2Y3ZDAyY2U2NTg4MzYzMGJkNjIzLi5mMzgyZmUyNzE3ZjZmM2VmY2FjOTk2ZWRhZDMxMjYyOTMy
NTMyOWYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTQtMDYtMDUgIFNlcmdpbyBWaWxsYXIg
U2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0NTUyBHcmlkIExheW91dF0g
U2ltcGxpZnkgdGhlIG5hbWVkIGdyaWQgbGluZXMgcmVzb2x1dGlvbiBhbGdvcml0aG0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzU0MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IHRl
c3QgdGhhdCBjaGVja3MgdGhhdCBuYW1lZCBncmlkIGxpbmVzIGFuZCBhcmVhcyBhcmUKKyAgICAg
ICAgY29ycmVjdGx5IHNldCBhZnRlciBkeW5hbWljYWxseSBjaGFuZ2luZyB0aGVtIHdpdGggSlMu
IEl0IGFsc28KKyAgICAgICAgdmVyaWZpZXMgdGhhdCB3ZSBwcm9wZXJseSByZWNvbXB1dGUgdGhl
IHJlc29sdXRpb24gb2YgbmFtZWQgZ3JpZAorICAgICAgICBsaW5lcy9hcmVhcyB3aGVuIHRoZSBw
b3NpdGlvbmluZyBwcm9wZXJ0aWVzIGNoYW5nZS4KKworICAgICAgICBBbHNvIGFwcGVuZGVkIGEg
bmV3IHRlc3QgY2FzZSB0byB2ZXJpZnkgdGhhdCBleHBsaWNpdGx5IGFkZGluZworICAgICAgICBu
YW1lZCBsaW5lcyBvZiB0aGUgZm9ybSA8Zm9vLXN0YXJ0Pi88Zm9vLWVuZD4gZWZmZWN0aXZlbHkg
Y3JlYXRlcworICAgICAgICBpbXBsaWNpdCBuYW1lZCBncmlkIGFyZWFzIHNvIHRoYXQgd2UgY291
bGQgdXNlIHRoZW0gaW4gZ3JpZAorICAgICAgICBwbGFjZW1lbnQgcHJvcGVydGllcyAoZm9yIGV4
YW1wbGUgLXdlYmtpdC1ncmlkLWNvbHVtbjogZm9vKS4KKworICAgICAgICBObyBuZWVkIHRvIGFk
ZCBtb3JlIHRlc3RzIGZvciBuYW1lZCBncmlkIGxpbmVzL2FyZWFzIHJlc29sdXRpb24gYXMKKyAg
ICAgICAgd2UgYWxyZWFkeSBoYXZlIGEgcXVpdGUgZ29vZCBjb3ZlcmFnZSAodGhlIGZlYXR1cmUg
d2FzIGFscmVhZHkKKyAgICAgICAgdGhlcmUsIHdlJ3JlIHNpbXBsaWZ5aW5nL2ltcHJvdmluZyB0
aGUgaW1wbGVtZW50YXRpb24pLgorCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFt
ZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtZHluYW1pYy1nZXQtc2V0LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3Jp
ZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtZHluYW1pYy1nZXQtc2V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1u
YW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
Y3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJl
c29sdXRpb24uaHRtbDoKKwogMjAxNC0wNi0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWlu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IHNvbWUgY29ybmVyIGNhc2VzIG9mIDpob3ZlciBh
bmQgOmFjdGl2ZSBpbiBxdWlya3MgbW9kZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
c3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtZHlu
YW1pYy1nZXQtc2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5
b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLWR5bmFtaWMtZ2V0LXNl
dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODRkOTQ0YmYyZTVlODdlMTNjNTcxZjk2ZWJlNmU3
ZGVhM2U4ZDcyZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQt
bGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLWR5bmFtaWMtZ2V0
LXNldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNyBAQAorVGhpcyB0ZXN0IGNoZWNrcyB3ZSBw
cm9wZXJseSByZWNvbXB1dGUgdGhlIHJlc29sdXRpb24gb2YgbmFtZWQgZ3JpZCBsaW5lcyBhbmQg
bmFtZWQgZ3JpZCBhcmVhcyB3aGVuIHdlIGNoYW5nZSB0aGUgZ3JpZCBwb3NpdGlvbmluZyBwcm9w
ZXJ0aWVzLgorUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwor
UEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFT
UworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwor
UEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5l
cy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtZHluYW1pYy1nZXQtc2V0Lmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9uYW1lZC1ncmlkLWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1h
cmVhcy1keW5hbWljLWdldC1zZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTAxMTVhYmU0N2I2ZGM5ZmIx
ZGIwMmJkODM1NWYzMDEyNjRjYTBkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMt
ZHluYW1pYy1nZXQtc2V0Lmh0bWwKQEAgLTAsMCArMSwxNTUgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIGhyZWY9InJlc291cmNlcy9ncmlkLmNzcyIgcmVsPSJzdHls
ZXNoZWV0Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gdGVz
dExheW91dChncmlkRGVmaW5pdGlvbnMsIGl0ZW1zRGVmaW5pdGlvbnMpCit7CisgICAgdmFyIGdy
aWRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JpZENvbnRhaW5lciIpOwor
ICAgIHZhciBncmlkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
IGdyaWRFbGVtZW50LmNsYXNzTmFtZSA9ICJncmlkIjsKKworICAgIGZvciAodmFyIGtleSBpbiBn
cmlkRGVmaW5pdGlvbnMpIHsKKwlpZiAoa2V5ID09ICJyb3dzIikKKwkgICAgZ3JpZEVsZW1lbnQu
c3R5bGUud2Via2l0R3JpZFRlbXBsYXRlUm93cyA9IGdyaWREZWZpbml0aW9uc1trZXldOworCWVs
c2UgaWYgKGtleSA9PSAiY29sdW1ucyIpCisJICAgIGdyaWRFbGVtZW50LnN0eWxlLndlYmtpdEdy
aWRUZW1wbGF0ZUNvbHVtbnMgPSBncmlkRGVmaW5pdGlvbnNba2V5XTsKKwllbHNlCisJICAgIGdy
aWRFbGVtZW50LnN0eWxlLndlYmtpdEdyaWRUZW1wbGF0ZUFyZWFzID0gZ3JpZERlZmluaXRpb25z
W2tleV07CisgICAgfQorCisgICAgZm9yICh2YXIgaSBpbiBpdGVtc0RlZmluaXRpb25zKSB7CisJ
dmFyIGl0ZW1EZWZpbml0aW9uID0gaXRlbXNEZWZpbml0aW9uc1tpXTsKKwl2YXIgZ3JpZEl0ZW0g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKwlncmlkSXRlbS5jbGFzc05hbWUgPSAi
c2l6ZWRUb0dyaWRBcmVhIjsKKworCWlmIChpdGVtRGVmaW5pdGlvbi5yb3cpCisJICAgIGdyaWRJ
dGVtLnN0eWxlLndlYmtpdEdyaWRSb3cgPSBpdGVtRGVmaW5pdGlvbi5yb3c7CisJaWYgKGl0ZW1E
ZWZpbml0aW9uLmNvbHVtbikKKwkgICAgZ3JpZEl0ZW0uc3R5bGUud2Via2l0R3JpZENvbHVtbiA9
IGl0ZW1EZWZpbml0aW9uLmNvbHVtbjsKKworCWdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1v
ZmZzZXQteCIsIGl0ZW1EZWZpbml0aW9uLngpOworCWdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0
YS1vZmZzZXQteSIsIGl0ZW1EZWZpbml0aW9uLnkpOworCWdyaWRJdGVtLnNldEF0dHJpYnV0ZSgi
ZGF0YS1leHBlY3RlZC13aWR0aCIsIGl0ZW1EZWZpbml0aW9uLndpZHRoKTsKKwlncmlkSXRlbS5z
ZXRBdHRyaWJ1dGUoImRhdGEtZXhwZWN0ZWQtaGVpZ2h0IiwgaXRlbURlZmluaXRpb24uaGVpZ2h0
KTsKKworCWdyaWRFbGVtZW50LmFwcGVuZENoaWxkKGdyaWRJdGVtKTsKKyAgICB9CisKKyAgICBn
cmlkQ29udGFpbmVyLmFwcGVuZENoaWxkKGdyaWRFbGVtZW50KTsKKworICAgIGNoZWNrTGF5b3V0
KCIuZ3JpZCIsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0LW91dHB1dCIpKTsKKyAgICBn
cmlkQ29udGFpbmVyLnJlbW92ZUNoaWxkKGdyaWRFbGVtZW50KTsKK30KKworZnVuY3Rpb24gdXBk
YXRlUm93c0NvbHVtbnMoKQoreworICAgIHZhciB0ZW1wbGF0ZUFyZWFPbmUgPSAnIi4gYSBhIiAi
YyBhIGEiICIuIC4gZCInOworICAgIHZhciB0ZW1wbGF0ZUFyZWFUd28gPSAnIi4gZCBkIiAiYSBk
IGQiICIuIC4gYyInOworCisgICAgdmFyIGNvbHVtblVuaXF1ZU5hbWVzID0gJyhhKSA1MHB4IChi
IGItc3RhcnQpIDEwMHB4IChjIC1zdGFydCkgMjAwcHggKGQpJzsKKyAgICB2YXIgcm93VW5pcXVl
TmFtZXMgPSAnKGUpIDUwcHggKGYgLWVuZCkgMTAwcHggKGcgZy1zdGFydCkgMjAwcHggKGgpJzsK
KyAgICB2YXIgY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSA9ICcoYS1zdGFydCBjLXN0YXJ0KSA1
MHB4IChkLXN0YXJ0KSAxMDBweCAyMDBweCc7CisgICAgdmFyIHJvd05hbWVkTGluZUJlZm9yZUFy
ZWEgPSAnKGMtc3RhcnQpIDUwcHggKGQtc3RhcnQpIDEwMHB4IDIwMHB4JzsKKyAgICB2YXIgY29s
dW1uUmVwZWF0ZWROYW1lcyA9ICcoZC1zdGFydCkgNTBweCAoZC1zdGFydCkgMTAwcHggKGQtc3Rh
cnQpIDIwMHB4JzsKKyAgICB2YXIgcm93UmVwZWF0ZWROYW1lcyA9ICc1MHB4IChjLWVuZCkgMTAw
cHggKGMtZW5kKSAyMDBweCAoYy1lbmQpJzsKKyAgICB2YXIgY29sdW1uTm9OYW1lcyA9ICc1MHB4
IDEwMHB4IDIwMHB4JzsKKyAgICB2YXIgcm93Tm9OYW1lcyA9ICc1MHB4IDEwMHB4IDIwMHB4JzsK
KworICAgIC8vIENoZWNrIGdyaWQgYXJlYSByZXNvbHV0aW9uLgorICAgIHZhciBncmlkQXJlYXNJ
dGVtcyA9IFsgeyAnY29sdW1uJzogJ2QnLCAneCc6ICcxNTAnLCAneSc6ICcwJywgJ3dpZHRoJzog
JzIwMCcsICdoZWlnaHQnOiAnNTAnIH0sCisJCQkgICB7ICdjb2x1bW4nOiAnYycsICd4JzogJzAn
LCAneSc6ICcwJywgJ3dpZHRoJzogJzUwJywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCSAgIHsgJ2Nv
bHVtbic6ICdhJywgJ3gnOiAnNTAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzMwMCcsICdoZWlnaHQn
OiAnNTAnIH1dOworCisgICAgdGVzdExheW91dCh7ICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywg
J3Jvd3MnOiByb3dOb05hbWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUgfSwgZ3JpZEFyZWFz
SXRlbXMpOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdjb2x1
bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzIH0sIGdyaWRBcmVhc0l0ZW1z
KTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAnYXJlYXMnOiB0
ZW1wbGF0ZUFyZWFPbmUsICdyb3dzJzogcm93Tm9OYW1lcyB9LCBncmlkQXJlYXNJdGVtcyk7CisK
KyAgICB2YXIgZ3JpZEFyZWFzSXRlbXNUd28gPSBbIHsgJ2NvbHVtbic6ICdkJywgJ3gnOiAnNTAn
LCAneSc6ICcwJywgJ3dpZHRoJzogJzMwMCcsICdoZWlnaHQnOiAnNTAnIH0sCisJCQkgICAgICB7
ICdjb2x1bW4nOiAnYycsICd4JzogJzE1MCcsICd5JzogJzAnLCAnd2lkdGgnOiAnMjAwJywgJ2hl
aWdodCc6ICc1MCcgfSwKKwkJCSAgICAgIHsgJ2NvbHVtbic6ICdhJywgJ3gnOiAnMCcsICd5Jzog
JzAnLCAnd2lkdGgnOiAnNTAnLCAnaGVpZ2h0JzogJzUwJyB9XTsKKworICAgIHRlc3RMYXlvdXQo
eyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2Nv
bHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMgfSwgZ3JpZEFyZWFzSXRl
bXMpOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdhcmVhcyc6
IHRlbXBsYXRlQXJlYVR3bywgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05v
TmFtZXMgfSwgZ3JpZEFyZWFzSXRlbXNUd28pOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0
ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05h
bWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICB9LCBncmlkQXJlYXNJdGVtcyk7CisgICAg
dGVzdExheW91dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5O
b05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgIH0s
IGdyaWRBcmVhc0l0ZW1zVHdvKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5O
b05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2Fy
ZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGdyaWRBcmVhc0l0ZW1zKTsKKyAgICB0ZXN0TGF5b3V0
KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMsICdhcmVhcyc6
IHRlbXBsYXRlQXJlYU9uZSwgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdvIH0sIGdyaWRBcmVhc0l0
ZW1zVHdvKTsKKworICAgIC8vIENoZWNrIGdyaWQgaW1wbGljaXQgbmFtZWQgZ3JpZCBsaW5lcyBy
ZXNvbHV0aW9uLgorICAgIHZhciBpbXBsaWNpdE5hbWVzSXRlbXMgPSBbeyAnY29sdW1uJzogJ2Et
c3RhcnQnLCAncm93JzogJ2Qtc3RhcnQnLCAneCc6ICc1MCcsICd5JzogJzE1MCcsICd3aWR0aCc6
ICcxMDAnLCAnaGVpZ2h0JzogJzIwMCcgfSwKKwkJCSAgICAgIHsgJ2NvbHVtbic6ICdhLXN0YXJ0
JywgJ3Jvdyc6ICdkJywgJ3gnOiAnNTAnLCAneSc6ICcxNTAnLCAnd2lkdGgnOiAnMTAwJywgJ2hl
aWdodCc6ICcyMDAnIH0sCisJCQkgICAgICB7ICdjb2x1bW4nOiAnZC1zdGFydCcsICdyb3cnOiAn
Yy1zdGFydCcsICd4JzogJzE1MCcsICd5JzogJzUwJywgJ3dpZHRoJzogJzIwMCcsICdoZWlnaHQn
OiAnMTAwJyB9XTsKKworICAgIHRlc3RMYXlvdXQoeyAnY29sdW1ucyc6IGNvbHVtbk5vTmFtZXMs
ICdyb3dzJzogcm93Tm9OYW1lcywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGltcGxpY2l0
TmFtZXNJdGVtcyk7CisgICAgdGVzdExheW91dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwg
J2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMgfSwgaW1wbGljaXRO
YW1lc0l0ZW1zKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAn
YXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdyb3dzJzogcm93Tm9OYW1lcyB9LCBpbXBsaWNpdE5h
bWVzSXRlbXMpOworCisgICAgdmFyIGltcGxpY2l0TmFtZXNJdGVtc1R3byA9IFt7ICdjb2x1bW4n
OiAnYS1zdGFydCcsICdyb3cnOiAnZC1zdGFydCcsICd4JzogJzAnLCAneSc6ICcwJywgJ3dpZHRo
JzogJzUwJywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCQkgeyAnY29sdW1uJzogJ2Etc3RhcnQnLCAn
cm93JzogJ2QnLCAneCc6ICcwJywgJ3knOiAnMCcsICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAn
MTUwJyB9LAorCQkJCSB7ICdjb2x1bW4nOiAnZC1zdGFydCcsICdyb3cnOiAnYy1zdGFydCcsICd4
JzogJzUwJywgJ3knOiAnMTUwJywgJ3dpZHRoJzogJzEwMCcsICdoZWlnaHQnOiAnMjAwJyB9XTsK
KworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdhcmVhcyc6IHRl
bXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFt
ZXMgfSwgaW1wbGljaXROYW1lc0l0ZW1zKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVt
cGxhdGVBcmVhT25lLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5zJzogY29sdW1u
Tm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzIH0sIGltcGxpY2l0TmFtZXNJdGVtc1R3byk7Cisg
ICAgdGVzdExheW91dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2NvbHVtbnMnOiBjb2x1
bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSB9
LCBpbXBsaWNpdE5hbWVzSXRlbXMpOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0
ZUFyZWFPbmUsICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzLCAn
YXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28gfSwgaW1wbGljaXROYW1lc0l0ZW1zVHdvKTsKKyAgICB0
ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMs
ICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGlt
cGxpY2l0TmFtZXNJdGVtcyk7CisgICAgdGVzdExheW91dCh7ICdjb2x1bW5zJzogY29sdW1uTm9O
YW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdhcmVh
cyc6IHRlbXBsYXRlQXJlYVR3byB9LCBpbXBsaWNpdE5hbWVzSXRlbXNUd28pOworCisgICAgLy8g
Q2hlY2sgcmVzb2x1dGlvbiB3aGVuIG5hbWVkIGxpbmVzIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGUg
Z3JpZCBhcmVhLgorICAgIHZhciBpdGVtc0JlZm9yZUFyZWEgPSBbIHsgJ2NvbHVtbic6ICdkJywg
J3gnOiAnNTAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzMwMCcsICdoZWlnaHQnOiAnNTAnIH0sCisJ
CQkgICAgeyAncm93JzogJ2MnLCAneCc6ICcwJywgJ3knOiAnMCcsICd3aWR0aCc6ICc1MCcsICdo
ZWlnaHQnOiAnMTUwJ30sCisJCQkgICAgeyAnY29sdW1uJzogJ2Qtc3RhcnQnLCAneCc6ICc1MCcs
ICd5JzogJzAnLCAnd2lkdGgnOiAnMTAwJywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCSAgICB7ICdj
b2x1bW4nOiAnYS1zdGFydCcsICdyb3cnOiAnZCcsICd4JzogJzAnLCAneSc6ICc1MCcsICd3aWR0
aCc6ICc1MCcsICdoZWlnaHQnOiAnMzAwJyB9IF07CisKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVt
bnMnOiBjb2x1bW5OYW1lZExpbmVCZWZvcmVBcmVhLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9y
ZUFyZWEsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSB9LCBpdGVtc0JlZm9yZUFyZWEpOworICAg
IHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdjb2x1bW5zJzogY29sdW1u
TmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jvd3MnOiByb3dOYW1lZExpbmVCZWZvcmVBcmVhIH0sIGl0
ZW1zQmVmb3JlQXJlYSk7CisgICAgdGVzdExheW91dCh7ICdjb2x1bW5zJzogY29sdW1uTmFtZWRM
aW5lQmVmb3JlQXJlYSwgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lLCAncm93cyc6IHJvd05hbWVk
TGluZUJlZm9yZUFyZWEgfSwgaXRlbXNCZWZvcmVBcmVhKTsKKworICAgIHZhciBpdGVtc0JlZm9y
ZUFyZWFUd28gPSBbIHsgJ2NvbHVtbic6ICdkJywgJ3gnOiAnNTAnLCAneSc6ICcwJywgJ3dpZHRo
JzogJzMwMCcsICdoZWlnaHQnOiAnNTAnIH0sCisJCQkgICAgICAgeyAncm93JzogJ2MnLCAneCc6
ICcwJywgJ3knOiAnMCcsICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAnMzUwJ30sCisJCQkgICAg
ICAgeyAnY29sdW1uJzogJ2Qtc3RhcnQnLCAneCc6ICc1MCcsICd5JzogJzAnLCAnd2lkdGgnOiAn
MTAwJywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCSAgICAgICB7ICdjb2x1bW4nOiAnYS1zdGFydCcs
ICdyb3cnOiAnZCcsICd4JzogJzAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzUwJywgJ2hlaWdodCc6
ICcxNTAnIH0gXTsKKworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28s
ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5OYW1lZExpbmVCZWZv
cmVBcmVhLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9yZUFyZWEgfSwgaXRlbXNCZWZvcmVBcmVh
KTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lLCAnYXJlYXMnOiB0
ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5zJzogY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jv
d3MnOiByb3dOYW1lZExpbmVCZWZvcmVBcmVhIH0sIGl0ZW1zQmVmb3JlQXJlYVR3byk7CisgICAg
dGVzdExheW91dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2NvbHVtbnMnOiBjb2x1bW5O
YW1lZExpbmVCZWZvcmVBcmVhLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9yZUFyZWEsICdhcmVh
cyc6IHRlbXBsYXRlQXJlYU9uZSB9LCBpdGVtc0JlZm9yZUFyZWEpOworICAgIHRlc3RMYXlvdXQo
eyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdjb2x1bW5zJzogY29sdW1uTmFtZWRMaW5lQmVm
b3JlQXJlYSwgJ3Jvd3MnOiByb3dOYW1lZExpbmVCZWZvcmVBcmVhLCAnYXJlYXMnOiB0ZW1wbGF0
ZUFyZWFUd28gfSwgaXRlbXNCZWZvcmVBcmVhVHdvKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVt
bnMnOiBjb2x1bW5OYW1lZExpbmVCZWZvcmVBcmVhLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9y
ZUFyZWEsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25l
IH0sIGl0ZW1zQmVmb3JlQXJlYSk7CisgICAgdGVzdExheW91dCh7ICdjb2x1bW5zJzogY29sdW1u
TmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jvd3MnOiByb3dOYW1lZExpbmVCZWZvcmVBcmVhLCAnYXJl
YXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3byB9LCBpdGVtc0Jl
Zm9yZUFyZWFUd28pOworCisgICAgLy8gQ2hlY2sgcmVzb2x1dGlvbiB3aGVuIG5hbWVkIGxpbmVz
IGFyZSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzLgorICAgIHZhciBpdGVtc1JlcGVhdCA9IFsgeyAn
Y29sdW1uJzogJ2QnLCAncm93JzogJ2MnLCAneCc6ICcwJywgJ3knOiAnNTAnLCAnd2lkdGgnOiAn
MzUwJywgJ2hlaWdodCc6ICcxMDAnIH0sCisJCQl7ICdjb2x1bW4nOiAnZC1zdGFydCAvIGQtZW5k
JywgJ3Jvdyc6ICdjLXN0YXJ0IC8gYy1lbmQnLCAneCc6ICcwJywgJ3knOiAnNTAnLCAnd2lkdGgn
OiAnMzUwJywgJ2hlaWdodCc6ICcxMDAnfSwKKwkJCXsgJ2NvbHVtbic6ICdjJywgJ3Jvdyc6ICdk
JywgJ3gnOiAnMCcsICd5JzogJzE1MCcsICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAnMjAwJyB9
IF07CisKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5SZXBlYXRlZE5hbWVzLCAn
cm93cyc6IHJvd1JlcGVhdGVkTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSB9LCBpdGVt
c1JlcGVhdCk7CisgICAgdGVzdExheW91dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2Nv
bHVtbnMnOiBjb2x1bW5SZXBlYXRlZE5hbWVzLCAncm93cyc6IHJvd1JlcGVhdGVkTmFtZXMgfSwg
aXRlbXNSZXBlYXQpOworICAgIHRlc3RMYXlvdXQoeyAnY29sdW1ucyc6IGNvbHVtblJlcGVhdGVk
TmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ3Jvd3MnOiByb3dSZXBlYXRlZE5hbWVz
IH0sIGl0ZW1zUmVwZWF0KTsKKworICAgIHZhciBpdGVtc1JlcGVhdFR3byA9IFsgeyAnY29sdW1u
JzogJ2QnLCAncm93JzogJ2MnLCAneCc6ICcwJywgJ3knOiAnMTUwJywgJ3dpZHRoJzogJzM1MCcs
ICdoZWlnaHQnOiAnMjAwJyB9LAorCQkJICAgeyAnY29sdW1uJzogJ2Qtc3RhcnQgLyBkLWVuZCcs
ICdyb3cnOiAnYy1zdGFydCAvIGMtZW5kJywgJ3gnOiAnMCcsICd5JzogJzE1MCcsICd3aWR0aCc6
ICczNTAnLCAnaGVpZ2h0JzogJzIwMCd9LAorCQkJICAgeyAnY29sdW1uJzogJ2MnLCAncm93Jzog
J2QnLCAneCc6ICcxNTAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzIwMCcsICdoZWlnaHQnOiAnMTUw
JyB9IF07CisKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdvLCAnYXJl
YXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdjb2x1bW5zJzogY29sdW1uUmVwZWF0ZWROYW1lcywgJ3Jv
d3MnOiByb3dSZXBlYXRlZE5hbWVzIH0sIGl0ZW1zUmVwZWF0KTsKKyAgICB0ZXN0TGF5b3V0KHsg
J2FyZWFzJzogdGVtcGxhdGVBcmVhT25lLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdjb2x1
bW5zJzogY29sdW1uUmVwZWF0ZWROYW1lcywgJ3Jvd3MnOiByb3dSZXBlYXRlZE5hbWVzIH0sIGl0
ZW1zUmVwZWF0VHdvKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdv
LCAnY29sdW1ucyc6IGNvbHVtblJlcGVhdGVkTmFtZXMsICdyb3dzJzogcm93UmVwZWF0ZWROYW1l
cywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGl0ZW1zUmVwZWF0KTsKKyAgICB0ZXN0TGF5
b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lLCAnY29sdW1ucyc6IGNvbHVtblJlcGVhdGVk
TmFtZXMsICdyb3dzJzogcm93UmVwZWF0ZWROYW1lcywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdv
IH0sIGl0ZW1zUmVwZWF0VHdvKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5S
ZXBlYXRlZE5hbWVzLCAncm93cyc6IHJvd1JlcGVhdGVkTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRl
QXJlYVR3bywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGl0ZW1zUmVwZWF0KTsKKyAgICB0
ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5SZXBlYXRlZE5hbWVzLCAncm93cyc6IHJvd1Jl
cGVhdGVkTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2FyZWFzJzogdGVtcGxhdGVB
cmVhVHdvIH0sIGl0ZW1zUmVwZWF0VHdvKTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCB1cGRhdGVSb3dzQ29sdW1ucywgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXY+VGhpcyB0ZXN0IGNoZWNrcyB3ZSBwcm9wZXJseSByZWNvbXB1dGUgdGhlIHJl
c29sdXRpb24gb2YgbmFtZWQgZ3JpZCBsaW5lcyBhbmQgbmFtZWQgZ3JpZCBhcmVhcyB3aGVuIHdl
IGNoYW5nZSB0aGUgZ3JpZCBwb3NpdGlvbmluZyBwcm9wZXJ0aWVzLjwvZGl2PgorCis8ZGl2IGlk
PSJncmlkQ29udGFpbmVyIiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj48L2Rpdj4KKworPGRp
diBpZD0idGVzdC1vdXRwdXQiPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9uYW1lZC1ncmlkLWxpbmVzLXdpdGgt
bmFtZWQtZ3JpZC1hcmVhcy1yZXNvbHV0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFz
LXJlc29sdXRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDcwZGY2NGFiNTMzZjYzYzRhYzU0YmYzZTFh
ODMyOGE0YTA1ZWM3ZjkuLjE0NDk4MzRjZmEwZWFhOTg0MTkyZWQ1NjUxN2MwZTVhOTI1NjFjNTIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQt
bGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24tZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1u
YW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24tZXhwZWN0ZWQudHh0CkBAIC0yMSwzICsyMSw0IEBA
IFBBU1MKIFBBU1MKIFBBU1MKIFBBU1MKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFz
LXJlc29sdXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVk
LWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24uaHRtbAppbmRleCAz
MWNlODJhNWVjNzg1ZGFjODU3Y2EzYWM5Y2QzMjJiYWY4MWZmYzEwLi4wYjk3ODE0Y2M4YTg2NTEz
NWJlNjFjMmQxMzY3ODIzZjM3NDU0NjIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy1ncmlkLWxheW91dC9uYW1lZC1ncmlkLWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1hcmVhcy1yZXNv
bHV0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQt
Z3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtcmVzb2x1dGlvbi5odG1sCkBAIC00Niw2
ICs0NiwxMSBAQAogICAgICAgLXdlYmtpdC1ncmlkLXRlbXBsYXRlLXJvd3M6IDUwcHggKGMtZW5k
KSAxMDBweCAoYy1lbmQpIDIwMHB4IChjLWVuZCk7CiAgIH0KIAorICAuZ3JpZEltcGxpY2l0QXJl
YSB7CisgICAgICAtd2Via2l0LWdyaWQtdGVtcGxhdGUtY29sdW1uczogNTBweCAoei1zdGFydCkg
MTAwcHggKHotZW5kKSAyMDBweDsKKyAgICAgIC13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1yb3dzOiA1
MHB4ICh6LXN0YXJ0KSAxMDBweCAyMDBweCAoei1lbmQpOworICB9CisKIDwvc3R5bGU+CiA8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2NoZWNrLWxheW91dC5qcyI+PC9zY3JpcHQ+CiA8L2hl
YWQ+CkBAIC0yNDAsNSArMjQ1LDE0IEBACiAgIDwvZGl2PgogPC9kaXY+CiAKKzwhLS0gQ2hlY2sg
dGhhdCA8Y3VzdG9tLWlkZW50Pi17c3RhcnR8ZW5kfSBuYW1lZCBsaW5lcyBkZWZpbmUgaW1wbGlj
aXQgbmFtZWQgYXJlYXMgLS0+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPgorICA8
ZGl2IGNsYXNzPSJncmlkIGdyaWRBcmVhcyBncmlkSW1wbGljaXRBcmVhIj4KKyAgICA8ZGl2IGNs
YXNzPSJzaXplZFRvR3JpZEFyZWEiIHN0eWxlPSItd2Via2l0LWdyaWQtY29sdW1uOiB6OyIgZGF0
YS1vZmZzZXQteD0iNTAiIGRhdGEtb2Zmc2V0LXk9IjAiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjEw
MCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjUwIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJzaXpl
ZFRvR3JpZEFyZWEiIHN0eWxlPSItd2Via2l0LWdyaWQtcm93OiB6OyIgZGF0YS1vZmZzZXQteD0i
MCIgZGF0YS1vZmZzZXQteT0iNTAiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjUwIiBkYXRhLWV4cGVj
dGVkLWhlaWdodD0iMzAwIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEi
IHN0eWxlPSItd2Via2l0LWdyaWQtY29sdW1uLWVuZDogejsgLXdlYmtpdC1ncmlkLXJvdy1zdGFy
dDogejsiIGRhdGEtb2Zmc2V0LXg9IjUwIiBkYXRhLW9mZnNldC15PSI1MCIgZGF0YS1leHBlY3Rl
ZC13aWR0aD0iMTAwIiBkYXRhLWV4cGVjdGVkLWhlaWdodD0iMTAwIj48L2Rpdj4KKyAgPC9kaXY+
Cis8L2Rpdj4KKwogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232559</attachid>
            <date>2014-06-05 09:54:37 -0700</date>
            <delta_ts>2014-06-10 02:15:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133543-20140605185411.patch</filename>
            <type>text/plain</type>
            <size>33293</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNiZTZlZmYyY2NhZDdi
ODQzZmZhNWJiYTdhMGRlMjk0NzY1Nzc5OS4uZDJiY2ZjOTA5NDhiNGNjNjRhMzc3NDEzNzdmMmYy
YzZhNDE0ZGMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTA2LTA1ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFNpbXBsaWZ5IHRoZSBuYW1lZCBncmlkIGxpbmVzIHJlc29sdXRpb24gYWxnb3Jp
dGhtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOYW1l
ZCBncmlkIGxpbmVzIHJlc29sdXRpb24gYWxnb3JpdGhtIGNhbiBiZSBoZWF2aWx5IHNpbXBsaWZp
ZWQgYnkKKyAgICAgICAgaW5zZXJ0aW5nIHRoZSBpbXBsaWNpdCBuYW1lZCBncmlkIGxpbmVzIGdl
bmVyYXRlZCBieSBlYWNoIGdyaWQKKyAgICAgICAgYXJlYSAoPGFyZWEtbmFtZT4te3N0YXJ0fGVu
ZH0gZm9yIHJvd3MgYW5kIGNvbHVtbnMpLCBpbnRvIHRoZSBsaXN0CisgICAgICAgIG9mIHVzZXIg
ZGVmaW5lZCBuYW1lZCBncmlkIGxpbmVzLiBUaGlzIHdheSB3ZSB3b3VsZCBvbmx5IGhhdmUgdG8K
KyAgICAgICAgZGVhbCB3aXRoIG5hbWVkIGdyaWQgbGluZXMgYW5kIGZvcmdldCBhYm91dCB0aGUg
bmFtZWQgZ3JpZCBhcmVhcworICAgICAgICAoYXMgZGVzY3JpYmVkIGluIHRoZSBzcGVjcworICAg
ICAgICBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtZ3JpZC8jZ3JpZC1wbGFjZW1lbnQtc2xv
dCkuCisKKyAgICAgICAgQXMgYSBuaWNlIHNpZGUgZWZmZWN0LCB3ZSdsbCBnZXQgZm9yIGZyZWUg
dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZQorICAgICAgICB1c2UgY2FzZSBkZXNjcmliZWQgaW4g
c2VjdGlvbiA1LjIuMiBJbXBsaWNpdCBOYW1lZCBBcmVhcy4KKworICAgICAgICBUZXN0OiBmYXN0
L2Nzcy1ncmlkLWxheW91dC9uYW1lZC1ncmlkLWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1hcmVhcy1k
eW5hbWljLWdldC1zZXQuaHRtbAorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJl
YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1N0
YXJ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpncmlkTGluZXNGb3JTaWRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmltcGxpY2l0TmFtZWRHcmlkTGluZUZvclNpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0
aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z3JpZExpbmVE
ZWZpbmVkQmVmb3JlR3JpZEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0TmFt
ZWRMaW5lUG9zaXRpb25JZkRlZmluZWRCZWZvcmVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdyaWQ6OmFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlvbik6IERlbGV0ZWQu
CisKIDIwMTQtMDYtMDMgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBzb21lIGNvcm5lciBjYXNlcyBvZiA6aG92ZXIgYW5kIDphY3RpdmUgaW4g
cXVpcmtzIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBmY2Q0MGMy
ZGUyM2NlMGViOTBhMmZiZGM0OWIyMmRhNmY3MmQwN2YzLi5kYWU4YjIwOTFjZjYwMDE0YTc4NWVm
MDk0NDU4ODJkYjNlNzI0M2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBA
IC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIlF1
b3Rlc0RhdGEuaCIKICNpbmNsdWRlICJSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgog
I2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmgiCkBAIC0xODU2LDYgKzE4NTcsMjMgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMoKQogfQogCiAjaWYgRU5BQkxFKENT
U19HUklEX0xBWU9VVCkKK3N0YXRpYyB2b2lkIGNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNG
cm9tR3JpZEFyZWEoY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMsIE5hbWVk
R3JpZExpbmVzTWFwJiBuYW1lZEdyaWRMaW5lcywgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBuYW1lZEdyaWRBcmVhcy5iZWdpbigpLCBl
bmQgPSBuYW1lZEdyaWRBcmVhcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEdy
aWRTcGFuIGFyZWFTcGFuID0gZGlyZWN0aW9uID09IEZvclJvd3MgPyBpdC0+dmFsdWUucm93cyA6
IGl0LT52YWx1ZS5jb2x1bW5zOworICAgICAgICB7CisgICAgICAgICAgICBOYW1lZEdyaWRMaW5l
c01hcDo6QWRkUmVzdWx0IHN0YXJ0UmVzdWx0ID0gbmFtZWRHcmlkTGluZXMuYWRkKGl0LT5rZXkg
KyAiLXN0YXJ0IiwgVmVjdG9yPHNpemVfdD4oKSk7CisgICAgICAgICAgICBzdGFydFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGFyZWFTcGFuLmluaXRpYWxQb3NpdGlvbkluZGV4KTsKKyAg
ICAgICAgICAgIHN0ZDo6c29ydChzdGFydFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYmVnaW4oKSwg
c3RhcnRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICB7
CisgICAgICAgICAgICBOYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IGVuZFJlc3VsdCA9IG5h
bWVkR3JpZExpbmVzLmFkZChpdC0+a2V5ICsgIi1lbmQiLCBWZWN0b3I8c2l6ZV90PigpKTsKKyAg
ICAgICAgICAgIGVuZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGFyZWFTcGFuLmZpbmFs
UG9zaXRpb25JbmRleCArIDEpOworICAgICAgICAgICAgc3RkOjpzb3J0KGVuZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYmVnaW4oKSwgZW5kUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5lbmQoKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgo
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIEdyaWRMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCiB7CiAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KSB7CkBA
IC0yNjYyLDYgKzI2ODAsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgT3JkZXJlZE5hbWVkR3Jp
ZExpbmVzTWFwIG9yZGVyZWROYW1lZEdyaWRMaW5lczsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBuYW1lZEdyaWRMaW5lcywgb3JkZXJlZE5hbWVk
R3JpZExpbmVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnN0IE5h
bWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0gc3RhdGUuc3R5bGUoKS0+bmFtZWRHcmlk
QXJlYSgpOworICAgICAgICBpZiAoIW5hbWVkR3JpZEFyZWFzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEobmFtZWRHcmlkQXJl
YXMsIG5hbWVkR3JpZExpbmVzLCBGb3JDb2x1bW5zKTsKKwogICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TmFtZWRHcmlkQ29sdW1uTGluZXMobmFtZWRHcmlkTGluZXMpOwogICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMob3JkZXJlZE5hbWVkR3JpZExpbmVz
KTsKQEAgLTI2ODUsNiArMjcwNywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBPcmRlcmVkTmFt
ZWRHcmlkTGluZXNNYXAgb3JkZXJlZE5hbWVkR3JpZExpbmVzOwogICAgICAgICBpZiAoIWNyZWF0
ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIG5hbWVkR3JpZExpbmVzLCBvcmRlcmVk
TmFtZWRHcmlkTGluZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29u
c3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1l
ZEdyaWRBcmVhKCk7CisgICAgICAgIGlmICghbmFtZWRHcmlkQXJlYXMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShuYW1lZEdy
aWRBcmVhcywgbmFtZWRHcmlkTGluZXMsIEZvclJvd3MpOworCiAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRO
YW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdyaWRMaW5lcyk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhvcmRlcmVkTmFtZWRHcmlkTGluZXMpOwpAQCAt
Mjc0MywxMCArMjc2OSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRl
VmFsdWUgPSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUodmFsdWUpOwotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZVZhbHVlLT5ncmlkQXJlYU1h
cCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KGdy
aWRUZW1wbGF0ZVZhbHVlLT5yb3dDb3VudCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZVZhbHVlLT5jb2x1bW5Db3VudCgp
KTsKKyAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRlQXJlYXNW
YWx1ZSA9IHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIGNvbnN0
IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNW
YWx1ZS0+Z3JpZEFyZWFNYXAoKTsKKworICAgICAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdy
aWRDb2x1bW5MaW5lcyA9IHN0YXRlLnN0eWxlKCktPm5hbWVkR3JpZENvbHVtbkxpbmVzKCk7Cisg
ICAgICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZFJvd0xpbmVzID0gc3RhdGUuc3R5bGUo
KS0+bmFtZWRHcmlkUm93TGluZXMoKTsKKyAgICAgICAgY3JlYXRlSW1wbGljaXROYW1lZEdyaWRM
aW5lc0Zyb21HcmlkQXJlYShuZXdOYW1lZEdyaWRBcmVhcywgbmFtZWRHcmlkQ29sdW1uTGluZXMs
IEZvckNvbHVtbnMpOworICAgICAgICBjcmVhdGVJbXBsaWNpdE5hbWVkR3JpZExpbmVzRnJvbUdy
aWRBcmVhKG5ld05hbWVkR3JpZEFyZWFzLCBuYW1lZEdyaWRSb3dMaW5lcywgRm9yUm93cyk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKG5hbWVkR3JpZENv
bHVtbkxpbmVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMo
bmFtZWRHcmlkUm93TGluZXMpOworCisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3Jp
ZEFyZWEoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Z3JpZEFyZWFNYXAoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChncmlkVGVtcGxhdGVBcmVhc1Zh
bHVlLT5yb3dDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJl
YUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUtPmNvbHVtbkNvdW50KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8qIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggMjFiYzI4ZTFiYjk4
YmEwMTg2ZGNiMWM0YmFkODQxMGFlNWI4NWFjMS4uNjI1ZDk4ODJkMGZjOGFmYjEyZThlYWRhYmFm
ZDkwY2I1NWRiNzdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApA
QCAtNDc2LDYgKzQ3NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb2x1bW5TaWRlKEdyaWRQ
b3NpdGlvblNpZGUgc2lkZSkKICAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUgfHwg
c2lkZSA9PSBDb2x1bW5FbmRTaWRlOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTdGFydFNp
ZGUoR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIHJldHVybiBzaWRlID09IENvbHVtblN0
YXJ0U2lkZSB8fCBzaWRlID09IFJvd1N0YXJ0U2lkZTsKK30KKwogc2l6ZV90IFJlbmRlckdyaWQ6
OmV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKEdyaWRQb3NpdGlvblNpZGUgc2lkZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gaXNDb2x1bW5TaWRlKHNpZGUpID8gZXhwbGljaXRHcmlkQ29sdW1uQ291bnQo
KSA6IGV4cGxpY2l0R3JpZFJvd0NvdW50KCk7CkBAIC04NTgsNjkgKzg2MywyMCBAQCBHcmlkU3Bh
biBSZW5kZXJHcmlkOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRp
b24oY29uc3QgUmVuZGVyQgogICAgIHJldHVybiBHcmlkU3Bhbihpbml0aWFsUG9zaXRpb24sIGlu
aXRpYWxQb3NpdGlvbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBncmlkTGluZURlZmluZWRC
ZWZvcmVHcmlkQXJlYShzaXplX3QgbmFtZWRHcmlkTGluZUZpcnN0RGVmaW5pdGlvbiwgY29uc3Qg
R3JpZENvb3JkaW5hdGUmIGdyaWRBcmVhQ29vcmRpbmF0ZXMsIEdyaWRQb3NpdGlvblNpZGUgc2lk
ZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc0ZvclNp
ZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7Ci0g
ICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBDb2x1bW5TdGFydFNpZGU6Ci0gICAgICAgIHJl
dHVybiBuYW1lZEdyaWRMaW5lRmlyc3REZWZpbml0aW9uIDwgZ3JpZEFyZWFDb29yZGluYXRlcy5j
b2x1bW5zLmluaXRpYWxQb3NpdGlvbkluZGV4OwotICAgIGNhc2UgQ29sdW1uRW5kU2lkZToKLSAg
ICAgICAgcmV0dXJuIG5hbWVkR3JpZExpbmVGaXJzdERlZmluaXRpb24gPCBncmlkQXJlYUNvb3Jk
aW5hdGVzLmNvbHVtbnMuZmluYWxQb3NpdGlvbkluZGV4OwotICAgIGNhc2UgUm93U3RhcnRTaWRl
OgotICAgICAgICByZXR1cm4gbmFtZWRHcmlkTGluZUZpcnN0RGVmaW5pdGlvbiA8IGdyaWRBcmVh
Q29vcmRpbmF0ZXMucm93cy5pbml0aWFsUG9zaXRpb25JbmRleDsKLSAgICBjYXNlIFJvd0VuZFNp
ZGU6Ci0gICAgICAgIHJldHVybiBuYW1lZEdyaWRMaW5lRmlyc3REZWZpbml0aW9uIDwgZ3JpZEFy
ZWFDb29yZGluYXRlcy5yb3dzLmZpbmFsUG9zaXRpb25JbmRleDsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc0NvbHVtblNp
ZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUubmFtZWRHcmlk
Um93TGluZXMoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0TmFtZWRMaW5lUG9zaXRpb25JZkRlZmlu
ZWRCZWZvcmVBcmVhKEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IE5hbWVkR3JpZExpbmVz
TWFwJiBuYW1lZExpbmVzTWFwLCBjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBjb25zdCBHcmlkQ29v
cmRpbmF0ZSYgZ3JpZEFyZWFDb29yZGluYXRlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCitzdGF0
aWMgaW5saW5lIGNvbnN0IFN0cmluZyBpbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JTaWRlKGNvbnN0
IFN0cmluZyYgbGluZU5hbWUsIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKIHsKLSAgICBhdXRvIGxp
bmVzSXRlcmF0b3IgPSBuYW1lZExpbmVzTWFwLmZpbmQobGluZU5hbWUpOwotICAgIGlmIChsaW5l
c0l0ZXJhdG9yID09IG5hbWVkTGluZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNpemVfdCBuYW1lZEdyaWRMaW5lRmlyc3REZWZpbml0aW9uID0gR3JpZFBvc2l0aW9uOjphZGp1
c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGxpbmVzSXRlcmF0b3ItPnZhbHVlWzBdLCBzaWRlKTsKLSAg
ICBpZiAoZ3JpZExpbmVEZWZpbmVkQmVmb3JlR3JpZEFyZWEobmFtZWRHcmlkTGluZUZpcnN0RGVm
aW5pdGlvbiwgZ3JpZEFyZWFDb29yZGluYXRlLCBzaWRlKSkKLSAgICAgICAgcG9zaXRpb24uc2V0
RXhwbGljaXRQb3NpdGlvbigxLCBsaW5lTmFtZSk7CisgICAgcmV0dXJuIGxpbmVOYW1lICsgKGlz
U3RhcnRTaWRlKHNpZGUpID8gIi1zdGFydCIgOiAiLWVuZCIpOwogfQogCi12b2lkIFJlbmRlckdy
aWQ6OmFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlvbihHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBH
cmlkUG9zaXRpb25TaWRlIHNpZGUpIGNvbnN0CitzdGF0aWMgYm9vbCBpc05vbkV4aXN0ZW50TmFt
ZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewotICAgIC8vIFRoZSBTdHlsZUJ1aWxkZXIg
YWx3YXlzIHRyZWF0cyA8Y3VzdG9tLWlkZW50PiBhcyBhIG5hbWVkIGdyaWQgYXJlYS4gV2UgbXVz
dCBkZWNpZGUgaGVyZSBpZiB0aGV5IGFyZSBnb2luZyB0byBiZQotICAgIC8vIHJlc29sdmVkIHRv
IGVpdGhlciBhIGdyaWQgYXJlYSBvciBhIGdyaWQgbGluZS4KLSAgICBBU1NFUlQocG9zaXRpb24u
aXNOYW1lZEdyaWRBcmVhKCkpOwotICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIGdyaWRBcmVh
TWFwID0gc3R5bGUoKS5uYW1lZEdyaWRBcmVhKCk7Ci0gICAgY29uc3QgTmFtZWRHcmlkTGluZXNN
YXAmIG5hbWVkTGluZXNNYXAgPSBpc0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZSgpLm5hbWVkR3Jp
ZENvbHVtbkxpbmVzKCkgOiBzdHlsZSgpLm5hbWVkR3JpZFJvd0xpbmVzKCk7Ci0KLSAgICBTdHJp
bmcgbmFtZWRHcmlkQXJlYU9yR3JpZExpbmUgPSBwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCk7Ci0g
ICAgYm9vbCBpc1N0YXJ0U2lkZSA9IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlIHx8IHNpZGUgPT0g
Um93U3RhcnRTaWRlOwotCi0gICAgYXV0byBhcmVhSXRlcmF0b3IgPSBncmlkQXJlYU1hcC5maW5k
KG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lKTsKLSAgICBpZiAoYXJlYUl0ZXJhdG9yICE9IGdyaWRB
cmVhTWFwLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyBncmlkTGluZU5hbWUgPSBuYW1lZEdyaWRB
cmVhT3JHcmlkTGluZSArIChpc1N0YXJ0U2lkZSA/ICItc3RhcnQiIDogIi1lbmQiKTsKLSAgICAg
ICAgc2V0TmFtZWRMaW5lUG9zaXRpb25JZkRlZmluZWRCZWZvcmVBcmVhKHBvc2l0aW9uLCBuYW1l
ZExpbmVzTWFwLCBncmlkTGluZU5hbWUsIGFyZWFJdGVyYXRvci0+dmFsdWUsIHNpZGUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBoYXNTdGFydFN1ZmZpeCA9IG5hbWVkR3Jp
ZEFyZWFPckdyaWRMaW5lLmVuZHNXaXRoKCItc3RhcnQiKTsKLSAgICBib29sIGhhc0VuZFN1ZmZp
eCA9IG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lLmVuZHNXaXRoKCItZW5kIik7Ci0gICAgaWYgKCho
YXNTdGFydFN1ZmZpeCAmJiBpc1N0YXJ0U2lkZSkgfHwgKGhhc0VuZFN1ZmZpeCAmJiAhaXNTdGFy
dFNpZGUpKSB7Ci0gICAgICAgIHNpemVfdCBzdWZmaXhMZW5ndGggPSBoYXNTdGFydFN1ZmZpeCA/
IHN0cmxlbigiLXN0YXJ0IikgOiBzdHJsZW4oIi1lbmQiKTsKLSAgICAgICAgU3RyaW5nIGdyaWRB
cmVhTmFtZSA9IG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lLnN1YnN0cmluZygwLCBuYW1lZEdyaWRB
cmVhT3JHcmlkTGluZS5sZW5ndGgoKSAtIHN1ZmZpeExlbmd0aCk7Ci0KLSAgICAgICAgYXV0byBh
cmVhSXRlcmF0b3IgPSBncmlkQXJlYU1hcC5maW5kKGdyaWRBcmVhTmFtZSk7Ci0gICAgICAgIGlm
IChhcmVhSXRlcmF0b3IgIT0gZ3JpZEFyZWFNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHBvc2l0
aW9uLnNldE5hbWVkR3JpZEFyZWEoZ3JpZEFyZWFOYW1lKTsKLSAgICAgICAgICAgIHNldE5hbWVk
TGluZVBvc2l0aW9uSWZEZWZpbmVkQmVmb3JlQXJlYShwb3NpdGlvbiwgbmFtZWRMaW5lc01hcCwg
bmFtZWRHcmlkQXJlYU9yR3JpZExpbmUsIGFyZWFJdGVyYXRvci0+dmFsdWUsIHNpZGUpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5hbWVkTGluZXNN
YXAuY29udGFpbnMobmFtZWRHcmlkQXJlYU9yR3JpZExpbmUpKQotICAgICAgICBwb3NpdGlvbi5z
ZXRFeHBsaWNpdFBvc2l0aW9uKDEsIG5hbWVkR3JpZEFyZWFPckdyaWRMaW5lKTsKLSAgICBlbHNl
Ci0gICAgICAgIHBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOworICAgIGNvbnN0IE5hbWVkR3Jp
ZExpbmVzTWFwJiBncmlkTGluZU5hbWVzID0gZ3JpZExpbmVzRm9yU2lkZShzdHlsZSwgc2lkZSk7
CisgICAgcmV0dXJuICFncmlkTGluZU5hbWVzLmNvbnRhaW5zKGltcGxpY2l0TmFtZWRHcmlkTGlu
ZUZvclNpZGUobGluZU5hbWUsIHNpZGUpKSAmJiAhZ3JpZExpbmVOYW1lcy5jb250YWlucyhsaW5l
TmFtZSk7CiB9CiAKIHZvaWQgUmVuZGVyR3JpZDo6YWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHls
ZShHcmlkUG9zaXRpb24mIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0
aW9uLCBHcmlkUG9zaXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNpZGUsIEdyaWRQb3NpdGlvblNp
ZGUgZmluYWxQb3NpdGlvblNpZGUpIGNvbnN0CkBAIC05MzIsMTEgKzg4OCwxNCBAQCB2b2lkIFJl
bmRlckdyaWQ6OmFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoR3JpZFBvc2l0aW9uJiBpbml0
aWFsUG9zaXRpb24sIEdyaQogICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNTcGFuKCkgJiYgZmlu
YWxQb3NpdGlvbi5pc1NwYW4oKSkKICAgICAgICAgZmluYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRp
b24oKTsKIAotICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkpCi0gICAg
ICAgIGFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlvbihpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQ
b3NpdGlvblNpZGUpOworICAgIC8vIFRyeSB0byBlYXJseSBkZXRlY3QgdGhlIGNhc2Ugb2Ygbm9u
IGV4aXN0aW5nIG5hbWVkIGdyaWQgbGluZXMuIFRoaXMgd2F5IHdlIGNvdWxkIGFzc3VtZSBsYXRl
ciB0aGF0CisgICAgLy8gUmVuZGVyR3JpZDo6cmVzb2x2ZUdyaXNQb3NpdGlvbkZyb21TdHlsZSgp
IHdvbid0IHJlcXVpcmUgdGhlIGF1dG9wbGFjZW1lbnQgdG8gcnVuLCBpLmUuLCBpdCdsbCBhbHdh
eXMgcmV0dXJuIGEKKyAgICAvLyB2YWxpZCByZXNvbHZlZCBwb3NpdGlvbi4KKyAgICBpZiAoaW5p
dGlhbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIGlzTm9uRXhpc3RlbnROYW1lZExpbmVP
ckFyZWEoaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgc3R5bGUoKSwgaW5pdGlhbFBv
c2l0aW9uU2lkZSkpCisgICAgICAgIGluaXRpYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsK
IAotICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpKQotICAgICAgICBhZGp1
c3ROYW1lZEdyaWRJdGVtUG9zaXRpb24oZmluYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvblNpZGUp
OworICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIGlzTm9uRXhpc3Rl
bnROYW1lZExpbmVPckFyZWEoZmluYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIHN0eWxlKCks
IGZpbmFsUG9zaXRpb25TaWRlKSkKKyAgICAgICAgZmluYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRp
b24oKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBSZW5kZXJHcmlkOjpyZXNvbHZl
R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJCb3gqIGdyaWRJdGVtLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtOTgyLDcgKzk0MSw3IEBAIHNp
emVfdCBSZW5kZXJHcmlkOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlKGNv
bnN0IEdyaWRQb3NpdGlvbiYgcG9zCiB7CiAgICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCkuaXNOdWxsKCkpOwogCi0gICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5l
c05hbWVzID0gaXNDb2x1bW5TaWRlKHNpZGUpID8gc3R5bGUoKS5uYW1lZEdyaWRDb2x1bW5MaW5l
cygpIDogc3R5bGUoKS5uYW1lZEdyaWRSb3dMaW5lcygpOworICAgIGNvbnN0IE5hbWVkR3JpZExp
bmVzTWFwJiBncmlkTGluZXNOYW1lcyA9IGdyaWRMaW5lc0ZvclNpZGUoc3R5bGUoKSwgc2lkZSk7
CiAgICAgTmFtZWRHcmlkTGluZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZ3JpZExpbmVzTmFt
ZXMuZmluZChwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkpOwogICAgIGlmIChpdCA9PSBncmlkTGlu
ZXNOYW1lcy5lbmQoKSkgewogICAgICAgICBpZiAocG9zaXRpb24uaXNQb3NpdGl2ZSgpKQpAQCAt
MTAyMywyMCArOTgyLDI2IEBAIHNpemVfdCBSZW5kZXJHcmlkOjpyZXNvbHZlR3JpZFBvc2l0aW9u
RnJvbVN0eWxlKGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyCiAgICAgfQogICAgIGNh
c2UgTmFtZWRHcmlkQXJlYVBvc2l0aW9uOgogICAgIHsKLSAgICAgICAgTmFtZWRHcmlkQXJlYU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZSgpLm5hbWVkR3JpZEFyZWEoKS5maW5kKHBvc2l0
aW9uLm5hbWVkR3JpZExpbmUoKSk7Ci0gICAgICAgIC8vIFVua25vd24gZ3JpZCBhcmVhIHNob3Vs
ZCBoYXZlIGJlZW4gY29tcHV0ZWQgdG8gJ2F1dG8nIGJ5IG5vdy4KLSAgICAgICAgQVNTRVJUKGl0
ICE9IHN0eWxlKCkubmFtZWRHcmlkQXJlYSgpLmVuZCgpKTsKLSAgICAgICAgY29uc3QgR3JpZENv
b3JkaW5hdGUmIGdyaWRBcmVhQ29vcmRpbmF0ZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgc3dpdGNo
IChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQ29sdW1uU3RhcnRTaWRlOgotICAgICAgICAgICAgcmV0
dXJuIGdyaWRBcmVhQ29vcmRpbmF0ZS5jb2x1bW5zLmluaXRpYWxQb3NpdGlvbkluZGV4OwotICAg
ICAgICBjYXNlIENvbHVtbkVuZFNpZGU6Ci0gICAgICAgICAgICByZXR1cm4gZ3JpZEFyZWFDb29y
ZGluYXRlLmNvbHVtbnMuZmluYWxQb3NpdGlvbkluZGV4OwotICAgICAgICBjYXNlIFJvd1N0YXJ0
U2lkZToKLSAgICAgICAgICAgIHJldHVybiBncmlkQXJlYUNvb3JkaW5hdGUucm93cy5pbml0aWFs
UG9zaXRpb25JbmRleDsKLSAgICAgICAgY2FzZSBSb3dFbmRTaWRlOgotICAgICAgICAgICAgcmV0
dXJuIGdyaWRBcmVhQ29vcmRpbmF0ZS5yb3dzLmZpbmFsUG9zaXRpb25JbmRleDsKLSAgICAgICAg
fQorICAgICAgICAvLyBGaXJzdCBhdHRlbXB0IHRvIG1hdGNoIHRoZSBncmlkIGFyZWEncyBlZGdl
IHRvIGEgbmFtZWQgZ3JpZCBhcmVhOiBpZiB0aGVyZSBpcyBhIG5hbWVkIGxpbmUgd2l0aCB0aGUg
bmFtZQorICAgICAgICAvLyAnJzxjdXN0b20taWRlbnQ+LXN0YXJ0IChmb3IgZ3JpZC0qLXN0YXJ0
KSAvIDxjdXN0b20taWRlbnQ+LWVuZCcnIChmb3IgZ3JpZC0qLWVuZCksIGNvbnRyaWJ1dGVzIHRo
ZSBmaXJzdCBzdWNoCisgICAgICAgIC8vIGxpbmUgdG8gdGhlIGdyaWQgaXRlbSdzIHBsYWNlbWVu
dC4KKyAgICAgICAgY29uc3QgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSBwb3NpdGlvbi5uYW1lZEdy
aWRMaW5lKCk7CisgICAgICAgIEFTU0VSVCghaXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShu
YW1lZEdyaWRMaW5lLCBzdHlsZSgpLCBzaWRlKSk7CisKKyAgICAgICAgY29uc3QgTmFtZWRHcmlk
TGluZXNNYXAmIGdyaWRMaW5lTmFtZXMgPSBncmlkTGluZXNGb3JTaWRlKHN0eWxlKCksIHNpZGUp
OworICAgICAgICBhdXRvIGltcGxpY2l0TGluZUl0ZXIgPSBncmlkTGluZU5hbWVzLmZpbmQoaW1w
bGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShuYW1lZEdyaWRMaW5lLCBzaWRlKSk7CisgICAgICAg
IGlmIChpbXBsaWNpdExpbmVJdGVyICE9IGdyaWRMaW5lTmFtZXMuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gR3JpZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGltcGxpY2l0
TGluZUl0ZXItPnZhbHVlWzBdLCBzaWRlKTsKKworICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRo
ZXJlIGlzIGEgbmFtZWQgbGluZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgY29udHJpYnV0ZXMg
dGhlIGZpcnN0IHN1Y2ggbGluZSB0byB0aGUgZ3JpZAorICAgICAgICAvLyBpdGVtJ3MgcGxhY2Vt
ZW50LgorICAgICAgICBhdXRvIGV4cGxpY2l0TGluZUl0ZXIgPSBncmlkTGluZU5hbWVzLmZpbmQo
bmFtZWRHcmlkTGluZSk7CisgICAgICAgIGlmIChleHBsaWNpdExpbmVJdGVyICE9IGdyaWRMaW5l
TmFtZXMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gR3JpZFBvc2l0aW9uOjphZGp1c3RHcmlk
UG9zaXRpb25Gb3JTaWRlKGV4cGxpY2l0TGluZUl0ZXItPnZhbHVlWzBdLCBzaWRlKTsKKworICAg
ICAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB3b3JrcyBzcGVjcyBtYW5kYXRlIHVzIHRvIHRy
ZWF0IGl0IGFzIGF1dG8gQlVUIHdlIHNob3VsZCBoYXZlIGRldGVjdGVkIGl0IGJlZm9yZSBjYWxs
aW5nCisgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaW4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9t
U3R5bGUoKS4gV2Ugc2hvdWxkIGJlIGNvdmVyZWQgYW55d2F5IGJ5IHRoZSBBU1NFUlQgYXQgdGhl
IGJlZ2lubmluZworICAgICAgICAvLyBvZiB0aGlzIGNhc2UgYmxvY2suCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMDY2LDcgKzEw
MzEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IFJlbmRlckdyaWQ6OnJlc29sdmVHcmlk
UG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbgogICAgIC8vICdzcGFuIDEnIGlzIGNvbnRh
aW5lZCBpbnNpZGUgYSBzaW5nbGUgZ3JpZCB0cmFjayByZWdhcmRsZXNzIG9mIHRoZSBkaXJlY3Rp
b24uCiAgICAgLy8gVGhhdCdzIHdoeSB0aGUgQ1NTIHNwYW4gdmFsdWUgaXMgb25lIG1vcmUgdGhh
biB0aGUgb2Zmc2V0IHdlIGFwcGx5LgogICAgIHNpemVfdCBwb3NpdGlvbk9mZnNldCA9IHBvc2l0
aW9uLnNwYW5Qb3NpdGlvbigpIC0gMTsKLSAgICBpZiAoc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUg
fHwgc2lkZSA9PSBSb3dTdGFydFNpZGUpIHsKKyAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpIHsK
ICAgICAgICAgc2l6ZV90IGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gc3RkOjptYXg8aW50Pigw
LCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gLSBwb3NpdGlvbk9mZnNldCk7CiAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiwg
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKICAgICB9CkBAIC0xMDgxLDcgKzEwNDYsNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IFJlbmRlckdyaWQ6OnJlc29sdmVOYW1lZEdyaWRMaW5l
UG9zaXRpb25BZ2FpbnN0T3Bwb3NpdAogICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBhcmUgbm90
IGFsbG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVuIGhhbmRs
ZWQgZHVyaW5nIHBhcnNpbmcuCiAgICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpID4g
MCk7CiAKLSAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVzTmFtZXMgPSBpc0Nv
bHVtblNpZGUoc2lkZSkgPyBzdHlsZSgpLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZSgp
Lm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRM
aW5lc05hbWVzID0gZ3JpZExpbmVzRm9yU2lkZShzdHlsZSgpLCBzaWRlKTsKICAgICBOYW1lZEdy
aWRMaW5lc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBncmlkTGluZXNOYW1lcy5maW5kKHBvc2l0
aW9uLm5hbWVkR3JpZExpbmUoKSk7CiAKICAgICAvLyBJZiB0aGVyZSBpcyBubyBuYW1lZCBncmlk
IGxpbmUgb2YgdGhhdCBuYW1lLCB3ZSByZXNvbHZlIHRoZSBwb3NpdGlvbiB0byAnYXV0bycgKHdo
aWNoIGlzIGVxdWl2YWxlbnQgdG8gJ3NwYW4gMScgaW4gdGhpcyBjYXNlKS4KQEAgLTEwODksNyAr
MTA1NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gUmVuZGVyR3JpZDo6cmVzb2x2ZU5h
bWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0CiAgICAgaWYgKGl0ID09IGdyaWRMaW5l
c05hbWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwogCi0g
ICAgaWYgKHNpZGUgPT0gUm93U3RhcnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlKQor
ICAgIGlmIChpc1N0YXJ0U2lkZShzaWRlKSkKICAgICAgICAgcmV0dXJuIHJlc29sdmVSb3dTdGFy
dENvbHVtblN0YXJ0TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgaXQtPnZhbHVlKTsKIAogICAgIHJl
dHVybiByZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgaXQtPnZh
bHVlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCAyMTZhYTgxMjA2ZDk5NWVkMWJmN2Y3ZDAyY2U2NTg4MzYzMGJkNjIzLi5m
MzgyZmUyNzE3ZjZmM2VmY2FjOTk2ZWRhZDMxMjYyOTMyNTMyOWYxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjkgQEAKKzIwMTQtMDYtMDUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0NTUyBHcmlkIExheW91dF0gU2ltcGxpZnkgdGhlIG5hbWVkIGdyaWQg
bGluZXMgcmVzb2x1dGlvbiBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMzU0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IHRlc3QgdGhhdCBjaGVja3MgdGhhdCBuYW1l
ZCBncmlkIGxpbmVzIGFuZCBhcmVhcyBhcmUKKyAgICAgICAgY29ycmVjdGx5IHNldCBhZnRlciBk
eW5hbWljYWxseSBjaGFuZ2luZyB0aGVtIHdpdGggSlMuIEl0IGFsc28KKyAgICAgICAgdmVyaWZp
ZXMgdGhhdCB3ZSBwcm9wZXJseSByZWNvbXB1dGUgdGhlIHJlc29sdXRpb24gb2YgbmFtZWQgZ3Jp
ZAorICAgICAgICBsaW5lcy9hcmVhcyB3aGVuIHRoZSBwb3NpdGlvbmluZyBwcm9wZXJ0aWVzIGNo
YW5nZS4KKworICAgICAgICBBbHNvIGFwcGVuZGVkIGEgbmV3IHRlc3QgY2FzZSB0byB2ZXJpZnkg
dGhhdCBleHBsaWNpdGx5IGFkZGluZworICAgICAgICBuYW1lZCBsaW5lcyBvZiB0aGUgZm9ybSA8
Zm9vLXN0YXJ0Pi88Zm9vLWVuZD4gZWZmZWN0aXZlbHkgY3JlYXRlcworICAgICAgICBpbXBsaWNp
dCBuYW1lZCBncmlkIGFyZWFzIHNvIHRoYXQgd2UgY291bGQgdXNlIHRoZW0gaW4gZ3JpZAorICAg
ICAgICBwbGFjZW1lbnQgcHJvcGVydGllcyAoZm9yIGV4YW1wbGUgLXdlYmtpdC1ncmlkLWNvbHVt
bjogZm9vKS4KKworICAgICAgICBObyBuZWVkIHRvIGFkZCBtb3JlIHRlc3RzIGZvciBuYW1lZCBn
cmlkIGxpbmVzL2FyZWFzIHJlc29sdXRpb24gYXMKKyAgICAgICAgd2UgYWxyZWFkeSBoYXZlIGEg
cXVpdGUgZ29vZCBjb3ZlcmFnZSAodGhlIGZlYXR1cmUgd2FzIGFscmVhZHkKKyAgICAgICAgdGhl
cmUsIHdlJ3JlIHNpbXBsaWZ5aW5nL2ltcHJvdmluZyB0aGUgaW1wbGVtZW50YXRpb24pLgorCisg
ICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVk
LWdyaWQtYXJlYXMtZHluYW1pYy1nZXQtc2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQt
YXJlYXMtZHluYW1pYy1nZXQtc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLWdy
aWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRp
b24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdy
aWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24uaHRtbDoKKwogMjAxNC0w
Ni0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
Rml4IHNvbWUgY29ybmVyIGNhc2VzIG9mIDpob3ZlciBhbmQgOmFjdGl2ZSBpbiBxdWlya3MgbW9k
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3Jp
ZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtZHluYW1pYy1nZXQtc2V0LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0
aC1uYW1lZC1ncmlkLWFyZWFzLWR5bmFtaWMtZ2V0LXNldC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODRkOTQ0YmYyZTVlODdlMTNjNTcxZjk2ZWJlNmU3ZGVhM2U4ZDcyZAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMt
d2l0aC1uYW1lZC1ncmlkLWFyZWFzLWR5bmFtaWMtZ2V0LXNldC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzNyBAQAorVGhpcyB0ZXN0IGNoZWNrcyB3ZSBwcm9wZXJseSByZWNvbXB1dGUgdGhlIHJl
c29sdXRpb24gb2YgbmFtZWQgZ3JpZCBsaW5lcyBhbmQgbmFtZWQgZ3JpZCBhcmVhcyB3aGVuIHdl
IGNoYW5nZSB0aGUgZ3JpZCBwb3NpdGlvbmluZyBwcm9wZXJ0aWVzLgorUEFTUworUEFTUworUEFT
UworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwor
UEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFT
UworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwor
UEFTUworUEFTUworUEFTUworUEFTUworUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMt
ZHluYW1pYy1nZXQtc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9u
YW1lZC1ncmlkLWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1hcmVhcy1keW5hbWljLWdldC1zZXQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mYTAxMTVhYmU0N2I2ZGM5ZmIxZGIwMmJkODM1NWYzMDEyNjRjYTBkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQt
Z3JpZC1saW5lcy13aXRoLW5hbWVkLWdyaWQtYXJlYXMtZHluYW1pYy1nZXQtc2V0Lmh0bWwKQEAg
LTAsMCArMSwxNTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIGhy
ZWY9InJlc291cmNlcy9ncmlkLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gdGVzdExheW91dChncmlkRGVmaW5pdGlvbnMs
IGl0ZW1zRGVmaW5pdGlvbnMpCit7CisgICAgdmFyIGdyaWRDb250YWluZXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZ3JpZENvbnRhaW5lciIpOworICAgIHZhciBncmlkRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGdyaWRFbGVtZW50LmNsYXNzTmFtZSA9
ICJncmlkIjsKKworICAgIGZvciAodmFyIGtleSBpbiBncmlkRGVmaW5pdGlvbnMpIHsKKwlpZiAo
a2V5ID09ICJyb3dzIikKKwkgICAgZ3JpZEVsZW1lbnQuc3R5bGUud2Via2l0R3JpZFRlbXBsYXRl
Um93cyA9IGdyaWREZWZpbml0aW9uc1trZXldOworCWVsc2UgaWYgKGtleSA9PSAiY29sdW1ucyIp
CisJICAgIGdyaWRFbGVtZW50LnN0eWxlLndlYmtpdEdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBncmlk
RGVmaW5pdGlvbnNba2V5XTsKKwllbHNlCisJICAgIGdyaWRFbGVtZW50LnN0eWxlLndlYmtpdEdy
aWRUZW1wbGF0ZUFyZWFzID0gZ3JpZERlZmluaXRpb25zW2tleV07CisgICAgfQorCisgICAgZm9y
ICh2YXIgaSBpbiBpdGVtc0RlZmluaXRpb25zKSB7CisJdmFyIGl0ZW1EZWZpbml0aW9uID0gaXRl
bXNEZWZpbml0aW9uc1tpXTsKKwl2YXIgZ3JpZEl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKwlncmlkSXRlbS5jbGFzc05hbWUgPSAic2l6ZWRUb0dyaWRBcmVhIjsKKworCWlm
IChpdGVtRGVmaW5pdGlvbi5yb3cpCisJICAgIGdyaWRJdGVtLnN0eWxlLndlYmtpdEdyaWRSb3cg
PSBpdGVtRGVmaW5pdGlvbi5yb3c7CisJaWYgKGl0ZW1EZWZpbml0aW9uLmNvbHVtbikKKwkgICAg
Z3JpZEl0ZW0uc3R5bGUud2Via2l0R3JpZENvbHVtbiA9IGl0ZW1EZWZpbml0aW9uLmNvbHVtbjsK
KworCWdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1vZmZzZXQteCIsIGl0ZW1EZWZpbml0aW9u
LngpOworCWdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1vZmZzZXQteSIsIGl0ZW1EZWZpbml0
aW9uLnkpOworCWdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC13aWR0aCIsIGl0
ZW1EZWZpbml0aW9uLndpZHRoKTsKKwlncmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtZXhwZWN0
ZWQtaGVpZ2h0IiwgaXRlbURlZmluaXRpb24uaGVpZ2h0KTsKKworCWdyaWRFbGVtZW50LmFwcGVu
ZENoaWxkKGdyaWRJdGVtKTsKKyAgICB9CisKKyAgICBncmlkQ29udGFpbmVyLmFwcGVuZENoaWxk
KGdyaWRFbGVtZW50KTsKKworICAgIGNoZWNrTGF5b3V0KCIuZ3JpZCIsIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZXN0LW91dHB1dCIpKTsKKyAgICBncmlkQ29udGFpbmVyLnJlbW92ZUNoaWxk
KGdyaWRFbGVtZW50KTsKK30KKworZnVuY3Rpb24gdXBkYXRlUm93c0NvbHVtbnMoKQoreworICAg
IHZhciB0ZW1wbGF0ZUFyZWFPbmUgPSAnIi4gYSBhIiAiYyBhIGEiICIuIC4gZCInOworICAgIHZh
ciB0ZW1wbGF0ZUFyZWFUd28gPSAnIi4gZCBkIiAiYSBkIGQiICIuIC4gYyInOworCisgICAgdmFy
IGNvbHVtblVuaXF1ZU5hbWVzID0gJyhhKSA1MHB4IChiIGItc3RhcnQpIDEwMHB4IChjIC1zdGFy
dCkgMjAwcHggKGQpJzsKKyAgICB2YXIgcm93VW5pcXVlTmFtZXMgPSAnKGUpIDUwcHggKGYgLWVu
ZCkgMTAwcHggKGcgZy1zdGFydCkgMjAwcHggKGgpJzsKKyAgICB2YXIgY29sdW1uTmFtZWRMaW5l
QmVmb3JlQXJlYSA9ICcoYS1zdGFydCBjLXN0YXJ0KSA1MHB4IChkLXN0YXJ0KSAxMDBweCAyMDBw
eCc7CisgICAgdmFyIHJvd05hbWVkTGluZUJlZm9yZUFyZWEgPSAnKGMtc3RhcnQpIDUwcHggKGQt
c3RhcnQpIDEwMHB4IDIwMHB4JzsKKyAgICB2YXIgY29sdW1uUmVwZWF0ZWROYW1lcyA9ICcoZC1z
dGFydCkgNTBweCAoZC1zdGFydCkgMTAwcHggKGQtc3RhcnQpIDIwMHB4JzsKKyAgICB2YXIgcm93
UmVwZWF0ZWROYW1lcyA9ICc1MHB4IChjLWVuZCkgMTAwcHggKGMtZW5kKSAyMDBweCAoYy1lbmQp
JzsKKyAgICB2YXIgY29sdW1uTm9OYW1lcyA9ICc1MHB4IDEwMHB4IDIwMHB4JzsKKyAgICB2YXIg
cm93Tm9OYW1lcyA9ICc1MHB4IDEwMHB4IDIwMHB4JzsKKworICAgIC8vIENoZWNrIGdyaWQgYXJl
YSByZXNvbHV0aW9uLgorICAgIHZhciBncmlkQXJlYXNJdGVtcyA9IFsgeyAnY29sdW1uJzogJ2Qn
LCAneCc6ICcxNTAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzIwMCcsICdoZWlnaHQnOiAnNTAnIH0s
CisJCQkgICB7ICdjb2x1bW4nOiAnYycsICd4JzogJzAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzUw
JywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCSAgIHsgJ2NvbHVtbic6ICdhJywgJ3gnOiAnNTAnLCAn
eSc6ICcwJywgJ3dpZHRoJzogJzMwMCcsICdoZWlnaHQnOiAnNTAnIH1dOworCisgICAgdGVzdExh
eW91dCh7ICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzLCAnYXJl
YXMnOiB0ZW1wbGF0ZUFyZWFPbmUgfSwgZ3JpZEFyZWFzSXRlbXMpOworICAgIHRlc3RMYXlvdXQo
eyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jv
d3MnOiByb3dOb05hbWVzIH0sIGdyaWRBcmVhc0l0ZW1zKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2Nv
bHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdyb3dzJzog
cm93Tm9OYW1lcyB9LCBncmlkQXJlYXNJdGVtcyk7CisKKyAgICB2YXIgZ3JpZEFyZWFzSXRlbXNU
d28gPSBbIHsgJ2NvbHVtbic6ICdkJywgJ3gnOiAnNTAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzMw
MCcsICdoZWlnaHQnOiAnNTAnIH0sCisJCQkgICAgICB7ICdjb2x1bW4nOiAnYycsICd4JzogJzE1
MCcsICd5JzogJzAnLCAnd2lkdGgnOiAnMjAwJywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCSAgICAg
IHsgJ2NvbHVtbic6ICdhJywgJ3gnOiAnMCcsICd5JzogJzAnLCAnd2lkdGgnOiAnNTAnLCAnaGVp
Z2h0JzogJzUwJyB9XTsKKworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFU
d28sICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAn
cm93cyc6IHJvd05vTmFtZXMgfSwgZ3JpZEFyZWFzSXRlbXMpOworICAgIHRlc3RMYXlvdXQoeyAn
YXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2NvbHVt
bnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMgfSwgZ3JpZEFyZWFzSXRlbXNU
d28pOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5z
JzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFy
ZWFPbmUsICB9LCBncmlkQXJlYXNJdGVtcyk7CisgICAgdGVzdExheW91dCh7ICdhcmVhcyc6IHRl
bXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFt
ZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgIH0sIGdyaWRBcmVhc0l0ZW1zVHdvKTsKKyAg
ICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFt
ZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0s
IGdyaWRBcmVhc0l0ZW1zKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05h
bWVzLCAncm93cyc6IHJvd05vTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2FyZWFz
JzogdGVtcGxhdGVBcmVhVHdvIH0sIGdyaWRBcmVhc0l0ZW1zVHdvKTsKKworICAgIC8vIENoZWNr
IGdyaWQgaW1wbGljaXQgbmFtZWQgZ3JpZCBsaW5lcyByZXNvbHV0aW9uLgorICAgIHZhciBpbXBs
aWNpdE5hbWVzSXRlbXMgPSBbeyAnY29sdW1uJzogJ2Etc3RhcnQnLCAncm93JzogJ2Qtc3RhcnQn
LCAneCc6ICc1MCcsICd5JzogJzE1MCcsICd3aWR0aCc6ICcxMDAnLCAnaGVpZ2h0JzogJzIwMCcg
fSwKKwkJCSAgICAgIHsgJ2NvbHVtbic6ICdhLXN0YXJ0JywgJ3Jvdyc6ICdkJywgJ3gnOiAnNTAn
LCAneSc6ICcxNTAnLCAnd2lkdGgnOiAnMTAwJywgJ2hlaWdodCc6ICcyMDAnIH0sCisJCQkgICAg
ICB7ICdjb2x1bW4nOiAnZC1zdGFydCcsICdyb3cnOiAnYy1zdGFydCcsICd4JzogJzE1MCcsICd5
JzogJzUwJywgJ3dpZHRoJzogJzIwMCcsICdoZWlnaHQnOiAnMTAwJyB9XTsKKworICAgIHRlc3RM
YXlvdXQoeyAnY29sdW1ucyc6IGNvbHVtbk5vTmFtZXMsICdyb3dzJzogcm93Tm9OYW1lcywgJ2Fy
ZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGltcGxpY2l0TmFtZXNJdGVtcyk7CisgICAgdGVzdExh
eW91dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVz
LCAncm93cyc6IHJvd05vTmFtZXMgfSwgaW1wbGljaXROYW1lc0l0ZW1zKTsKKyAgICB0ZXN0TGF5
b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUs
ICdyb3dzJzogcm93Tm9OYW1lcyB9LCBpbXBsaWNpdE5hbWVzSXRlbXMpOworCisgICAgdmFyIGlt
cGxpY2l0TmFtZXNJdGVtc1R3byA9IFt7ICdjb2x1bW4nOiAnYS1zdGFydCcsICdyb3cnOiAnZC1z
dGFydCcsICd4JzogJzAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzUwJywgJ2hlaWdodCc6ICc1MCcg
fSwKKwkJCQkgeyAnY29sdW1uJzogJ2Etc3RhcnQnLCAncm93JzogJ2QnLCAneCc6ICcwJywgJ3kn
OiAnMCcsICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAnMTUwJyB9LAorCQkJCSB7ICdjb2x1bW4n
OiAnZC1zdGFydCcsICdyb3cnOiAnYy1zdGFydCcsICd4JzogJzUwJywgJ3knOiAnMTUwJywgJ3dp
ZHRoJzogJzEwMCcsICdoZWlnaHQnOiAnMjAwJyB9XTsKKworICAgIHRlc3RMYXlvdXQoeyAnYXJl
YXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMn
OiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMgfSwgaW1wbGljaXROYW1lc0l0ZW1z
KTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lLCAnYXJlYXMnOiB0
ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05h
bWVzIH0sIGltcGxpY2l0TmFtZXNJdGVtc1R3byk7CisgICAgdGVzdExheW91dCh7ICdhcmVhcyc6
IHRlbXBsYXRlQXJlYVR3bywgJ2NvbHVtbnMnOiBjb2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05v
TmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSB9LCBpbXBsaWNpdE5hbWVzSXRlbXMpOwor
ICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdjb2x1bW5zJzogY29s
dW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVzLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28g
fSwgaW1wbGljaXROYW1lc0l0ZW1zVHdvKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBj
b2x1bW5Ob05hbWVzLCAncm93cyc6IHJvd05vTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3
bywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGltcGxpY2l0TmFtZXNJdGVtcyk7CisgICAg
dGVzdExheW91dCh7ICdjb2x1bW5zJzogY29sdW1uTm9OYW1lcywgJ3Jvd3MnOiByb3dOb05hbWVz
LCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3byB9LCBp
bXBsaWNpdE5hbWVzSXRlbXNUd28pOworCisgICAgLy8gQ2hlY2sgcmVzb2x1dGlvbiB3aGVuIG5h
bWVkIGxpbmVzIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGUgZ3JpZCBhcmVhLgorICAgIHZhciBpdGVt
c0JlZm9yZUFyZWEgPSBbIHsgJ2NvbHVtbic6ICdkJywgJ3gnOiAnNTAnLCAneSc6ICcwJywgJ3dp
ZHRoJzogJzMwMCcsICdoZWlnaHQnOiAnNTAnIH0sCisJCQkgICAgeyAncm93JzogJ2MnLCAneCc6
ICcwJywgJ3knOiAnMCcsICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAnMTUwJ30sCisJCQkgICAg
eyAnY29sdW1uJzogJ2Qtc3RhcnQnLCAneCc6ICc1MCcsICd5JzogJzAnLCAnd2lkdGgnOiAnMTAw
JywgJ2hlaWdodCc6ICc1MCcgfSwKKwkJCSAgICB7ICdjb2x1bW4nOiAnYS1zdGFydCcsICdyb3cn
OiAnZCcsICd4JzogJzAnLCAneSc6ICc1MCcsICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAnMzAw
JyB9IF07CisKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5OYW1lZExpbmVCZWZv
cmVBcmVhLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9yZUFyZWEsICdhcmVhcyc6IHRlbXBsYXRl
QXJlYU9uZSB9LCBpdGVtc0JlZm9yZUFyZWEpOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0
ZW1wbGF0ZUFyZWFPbmUsICdjb2x1bW5zJzogY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jv
d3MnOiByb3dOYW1lZExpbmVCZWZvcmVBcmVhIH0sIGl0ZW1zQmVmb3JlQXJlYSk7CisgICAgdGVz
dExheW91dCh7ICdjb2x1bW5zJzogY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSwgJ2FyZWFzJzog
dGVtcGxhdGVBcmVhT25lLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9yZUFyZWEgfSwgaXRlbXNC
ZWZvcmVBcmVhKTsKKworICAgIHZhciBpdGVtc0JlZm9yZUFyZWFUd28gPSBbIHsgJ2NvbHVtbic6
ICdkJywgJ3gnOiAnNTAnLCAneSc6ICcwJywgJ3dpZHRoJzogJzMwMCcsICdoZWlnaHQnOiAnNTAn
IH0sCisJCQkgICAgICAgeyAncm93JzogJ2MnLCAneCc6ICcwJywgJ3knOiAnMCcsICd3aWR0aCc6
ICc1MCcsICdoZWlnaHQnOiAnMzUwJ30sCisJCQkgICAgICAgeyAnY29sdW1uJzogJ2Qtc3RhcnQn
LCAneCc6ICc1MCcsICd5JzogJzAnLCAnd2lkdGgnOiAnMTAwJywgJ2hlaWdodCc6ICc1MCcgfSwK
KwkJCSAgICAgICB7ICdjb2x1bW4nOiAnYS1zdGFydCcsICdyb3cnOiAnZCcsICd4JzogJzAnLCAn
eSc6ICcwJywgJ3dpZHRoJzogJzUwJywgJ2hlaWdodCc6ICcxNTAnIH0gXTsKKworICAgIHRlc3RM
YXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9u
ZSwgJ2NvbHVtbnMnOiBjb2x1bW5OYW1lZExpbmVCZWZvcmVBcmVhLCAncm93cyc6IHJvd05hbWVk
TGluZUJlZm9yZUFyZWEgfSwgaXRlbXNCZWZvcmVBcmVhKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2Fy
ZWFzJzogdGVtcGxhdGVBcmVhT25lLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5z
JzogY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jvd3MnOiByb3dOYW1lZExpbmVCZWZvcmVB
cmVhIH0sIGl0ZW1zQmVmb3JlQXJlYVR3byk7CisgICAgdGVzdExheW91dCh7ICdhcmVhcyc6IHRl
bXBsYXRlQXJlYVR3bywgJ2NvbHVtbnMnOiBjb2x1bW5OYW1lZExpbmVCZWZvcmVBcmVhLCAncm93
cyc6IHJvd05hbWVkTGluZUJlZm9yZUFyZWEsICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSB9LCBp
dGVtc0JlZm9yZUFyZWEpOworICAgIHRlc3RMYXlvdXQoeyAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFP
bmUsICdjb2x1bW5zJzogY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jvd3MnOiByb3dOYW1l
ZExpbmVCZWZvcmVBcmVhLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28gfSwgaXRlbXNCZWZvcmVB
cmVhVHdvKTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5OYW1lZExpbmVCZWZv
cmVBcmVhLCAncm93cyc6IHJvd05hbWVkTGluZUJlZm9yZUFyZWEsICdhcmVhcyc6IHRlbXBsYXRl
QXJlYVR3bywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25lIH0sIGl0ZW1zQmVmb3JlQXJlYSk7Cisg
ICAgdGVzdExheW91dCh7ICdjb2x1bW5zJzogY29sdW1uTmFtZWRMaW5lQmVmb3JlQXJlYSwgJ3Jv
d3MnOiByb3dOYW1lZExpbmVCZWZvcmVBcmVhLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdh
cmVhcyc6IHRlbXBsYXRlQXJlYVR3byB9LCBpdGVtc0JlZm9yZUFyZWFUd28pOworCisgICAgLy8g
Q2hlY2sgcmVzb2x1dGlvbiB3aGVuIG5hbWVkIGxpbmVzIGFyZSBkZWZpbmVkIG11bHRpcGxlIHRp
bWVzLgorICAgIHZhciBpdGVtc1JlcGVhdCA9IFsgeyAnY29sdW1uJzogJ2QnLCAncm93JzogJ2Mn
LCAneCc6ICcwJywgJ3knOiAnNTAnLCAnd2lkdGgnOiAnMzUwJywgJ2hlaWdodCc6ICcxMDAnIH0s
CisJCQl7ICdjb2x1bW4nOiAnZC1zdGFydCAvIGQtZW5kJywgJ3Jvdyc6ICdjLXN0YXJ0IC8gYy1l
bmQnLCAneCc6ICcwJywgJ3knOiAnNTAnLCAnd2lkdGgnOiAnMzUwJywgJ2hlaWdodCc6ICcxMDAn
fSwKKwkJCXsgJ2NvbHVtbic6ICdjJywgJ3Jvdyc6ICdkJywgJ3gnOiAnMCcsICd5JzogJzE1MCcs
ICd3aWR0aCc6ICc1MCcsICdoZWlnaHQnOiAnMjAwJyB9IF07CisKKyAgICB0ZXN0TGF5b3V0KHsg
J2NvbHVtbnMnOiBjb2x1bW5SZXBlYXRlZE5hbWVzLCAncm93cyc6IHJvd1JlcGVhdGVkTmFtZXMs
ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSB9LCBpdGVtc1JlcGVhdCk7CisgICAgdGVzdExheW91
dCh7ICdhcmVhcyc6IHRlbXBsYXRlQXJlYU9uZSwgJ2NvbHVtbnMnOiBjb2x1bW5SZXBlYXRlZE5h
bWVzLCAncm93cyc6IHJvd1JlcGVhdGVkTmFtZXMgfSwgaXRlbXNSZXBlYXQpOworICAgIHRlc3RM
YXlvdXQoeyAnY29sdW1ucyc6IGNvbHVtblJlcGVhdGVkTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRl
QXJlYU9uZSwgJ3Jvd3MnOiByb3dSZXBlYXRlZE5hbWVzIH0sIGl0ZW1zUmVwZWF0KTsKKworICAg
IHZhciBpdGVtc1JlcGVhdFR3byA9IFsgeyAnY29sdW1uJzogJ2QnLCAncm93JzogJ2MnLCAneCc6
ICcwJywgJ3knOiAnMTUwJywgJ3dpZHRoJzogJzM1MCcsICdoZWlnaHQnOiAnMjAwJyB9LAorCQkJ
ICAgeyAnY29sdW1uJzogJ2Qtc3RhcnQgLyBkLWVuZCcsICdyb3cnOiAnYy1zdGFydCAvIGMtZW5k
JywgJ3gnOiAnMCcsICd5JzogJzE1MCcsICd3aWR0aCc6ICczNTAnLCAnaGVpZ2h0JzogJzIwMCd9
LAorCQkJICAgeyAnY29sdW1uJzogJ2MnLCAncm93JzogJ2QnLCAneCc6ICcxNTAnLCAneSc6ICcw
JywgJ3dpZHRoJzogJzIwMCcsICdoZWlnaHQnOiAnMTUwJyB9IF07CisKKyAgICB0ZXN0TGF5b3V0
KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdvLCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFPbmUsICdj
b2x1bW5zJzogY29sdW1uUmVwZWF0ZWROYW1lcywgJ3Jvd3MnOiByb3dSZXBlYXRlZE5hbWVzIH0s
IGl0ZW1zUmVwZWF0KTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhT25l
LCAnYXJlYXMnOiB0ZW1wbGF0ZUFyZWFUd28sICdjb2x1bW5zJzogY29sdW1uUmVwZWF0ZWROYW1l
cywgJ3Jvd3MnOiByb3dSZXBlYXRlZE5hbWVzIH0sIGl0ZW1zUmVwZWF0VHdvKTsKKyAgICB0ZXN0
TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdvLCAnY29sdW1ucyc6IGNvbHVtblJlcGVh
dGVkTmFtZXMsICdyb3dzJzogcm93UmVwZWF0ZWROYW1lcywgJ2FyZWFzJzogdGVtcGxhdGVBcmVh
T25lIH0sIGl0ZW1zUmVwZWF0KTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2FyZWFzJzogdGVtcGxhdGVB
cmVhT25lLCAnY29sdW1ucyc6IGNvbHVtblJlcGVhdGVkTmFtZXMsICdyb3dzJzogcm93UmVwZWF0
ZWROYW1lcywgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdvIH0sIGl0ZW1zUmVwZWF0VHdvKTsKKyAg
ICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBjb2x1bW5SZXBlYXRlZE5hbWVzLCAncm93cyc6IHJv
d1JlcGVhdGVkTmFtZXMsICdhcmVhcyc6IHRlbXBsYXRlQXJlYVR3bywgJ2FyZWFzJzogdGVtcGxh
dGVBcmVhT25lIH0sIGl0ZW1zUmVwZWF0KTsKKyAgICB0ZXN0TGF5b3V0KHsgJ2NvbHVtbnMnOiBj
b2x1bW5SZXBlYXRlZE5hbWVzLCAncm93cyc6IHJvd1JlcGVhdGVkTmFtZXMsICdhcmVhcyc6IHRl
bXBsYXRlQXJlYU9uZSwgJ2FyZWFzJzogdGVtcGxhdGVBcmVhVHdvIH0sIGl0ZW1zUmVwZWF0VHdv
KTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCB1cGRhdGVSb3dzQ29sdW1u
cywgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+VGhpcyB0ZXN0IGNo
ZWNrcyB3ZSBwcm9wZXJseSByZWNvbXB1dGUgdGhlIHJlc29sdXRpb24gb2YgbmFtZWQgZ3JpZCBs
aW5lcyBhbmQgbmFtZWQgZ3JpZCBhcmVhcyB3aGVuIHdlIGNoYW5nZSB0aGUgZ3JpZCBwb3NpdGlv
bmluZyBwcm9wZXJ0aWVzLjwvZGl2PgorCis8ZGl2IGlkPSJncmlkQ29udGFpbmVyIiBzdHlsZT0i
cG9zaXRpb246IHJlbGF0aXZlIj48L2Rpdj4KKworPGRpdiBpZD0idGVzdC1vdXRwdXQiPjwvZGl2
PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1n
cmlkLWxheW91dC9uYW1lZC1ncmlkLWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1hcmVhcy1yZXNvbHV0
aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVk
LWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24tZXhwZWN0ZWQudHh0
CmluZGV4IDcwZGY2NGFiNTMzZjYzYzRhYzU0YmYzZTFhODMyOGE0YTA1ZWM3ZjkuLjE0NDk4MzRj
ZmEwZWFhOTg0MTkyZWQ1NjUxN2MwZTVhOTI1NjFjNTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFy
ZWFzLXJlc29sdXRpb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdy
aWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRp
b24tZXhwZWN0ZWQudHh0CkBAIC0yMSwzICsyMSw0IEBAIFBBU1MKIFBBU1MKIFBBU1MKIFBBU1MK
K1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVk
LWdyaWQtbGluZXMtd2l0aC1uYW1lZC1ncmlkLWFyZWFzLXJlc29sdXRpb24uaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L25hbWVkLWdyaWQtbGluZXMtd2l0aC1uYW1lZC1n
cmlkLWFyZWFzLXJlc29sdXRpb24uaHRtbAppbmRleCAzMWNlODJhNWVjNzg1ZGFjODU3Y2EzYWM5
Y2QzMjJiYWY4MWZmYzEwLi4wYjk3ODE0Y2M4YTg2NTEzNWJlNjFjMmQxMzY3ODIzZjM3NDU0NjIy
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9uYW1lZC1ncmlk
LWxpbmVzLXdpdGgtbmFtZWQtZ3JpZC1hcmVhcy1yZXNvbHV0aW9uLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbmFtZWQtZ3JpZC1saW5lcy13aXRoLW5hbWVkLWdy
aWQtYXJlYXMtcmVzb2x1dGlvbi5odG1sCkBAIC00Niw2ICs0NiwxMSBAQAogICAgICAgLXdlYmtp
dC1ncmlkLXRlbXBsYXRlLXJvd3M6IDUwcHggKGMtZW5kKSAxMDBweCAoYy1lbmQpIDIwMHB4IChj
LWVuZCk7CiAgIH0KIAorICAuZ3JpZEltcGxpY2l0QXJlYSB7CisgICAgICAtd2Via2l0LWdyaWQt
dGVtcGxhdGUtY29sdW1uczogNTBweCAoei1zdGFydCkgMTAwcHggKHotZW5kKSAyMDBweDsKKyAg
ICAgIC13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1yb3dzOiA1MHB4ICh6LXN0YXJ0KSAxMDBweCAyMDBw
eCAoei1lbmQpOworICB9CisKIDwvc3R5bGU+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CkBAIC0yNDAsNSArMjQ1LDE0IEBA
CiAgIDwvZGl2PgogPC9kaXY+CiAKKzwhLS0gQ2hlY2sgdGhhdCA8Y3VzdG9tLWlkZW50Pi17c3Rh
cnR8ZW5kfSBuYW1lZCBsaW5lcyBkZWZpbmUgaW1wbGljaXQgbmFtZWQgYXJlYXMgLS0+Cis8ZGl2
IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPgorICA8ZGl2IGNsYXNzPSJncmlkIGdyaWRBcmVh
cyBncmlkSW1wbGljaXRBcmVhIj4KKyAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIHN0
eWxlPSItd2Via2l0LWdyaWQtY29sdW1uOiB6OyIgZGF0YS1vZmZzZXQteD0iNTAiIGRhdGEtb2Zm
c2V0LXk9IjAiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjEwMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9
IjUwIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIHN0eWxlPSItd2Vi
a2l0LWdyaWQtcm93OiB6OyIgZGF0YS1vZmZzZXQteD0iMCIgZGF0YS1vZmZzZXQteT0iNTAiIGRh
dGEtZXhwZWN0ZWQtd2lkdGg9IjUwIiBkYXRhLWV4cGVjdGVkLWhlaWdodD0iMzAwIj48L2Rpdj4K
KyAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIHN0eWxlPSItd2Via2l0LWdyaWQtY29s
dW1uLWVuZDogejsgLXdlYmtpdC1ncmlkLXJvdy1zdGFydDogejsiIGRhdGEtb2Zmc2V0LXg9IjUw
IiBkYXRhLW9mZnNldC15PSI1MCIgZGF0YS1leHBlY3RlZC13aWR0aD0iMTAwIiBkYXRhLWV4cGVj
dGVkLWhlaWdodD0iMTAwIj48L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KKwogPC9ib2R5PgogPC9o
dG1sPgo=
</data>
<flag name="review"
          id="257055"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>