<?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>45719</bug_id>
          
          <creation_ts>2010-09-13 16:32:13 -0700</creation_ts>
          <short_desc>A radio button not in a Document should not join a radio button group</short_desc>
          <delta_ts>2012-01-11 04:20:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://leosciencelab.com/1.php</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76051</dependson>
          <blocked>74909</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joel">joel</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ljharb</cc>
    
    <cc>my.shin</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>278567</commentid>
    <comment_count>0</comment_count>
    <who name="Joel">joel</who>
    <bug_when>2010-09-13 16:32:13 -0700</bug_when>
    <thetext>http://le.bytestudios.com/1.php


$(&apos;body&apos;).append(&apos;&lt;label&gt;&lt;input checked=&quot;checked&quot; type=&quot;radio&quot; name=&quot;checkme&quot;&gt;I should be checked&lt;/label&gt;&apos;);

only if you have a name attribute, the checkbox will not be checked after this is run.
if you remove the name attribute everything works fine.
this can be seen on chrome as well.
windows and mac.

this works:
$(&apos;body&apos;).append(&apos;&lt;label&gt;&lt;input checked=&quot;checked&quot; type=&quot;radio&quot;&gt;I am checked&lt;/label&gt;&apos;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279604</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-15 10:27:35 -0700</bug_when>
    <thetext>See also: bug 34520, bug 37900.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319237</commentid>
    <comment_count>2</comment_count>
      <attachid>76008</attachid>
    <who name="My Shin">my.shin</who>
    <bug_when>2010-12-08 20:28:41 -0800</bug_when>
    <thetext>Created attachment 76008
proposed patch

I upload patch. please review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320770</commentid>
    <comment_count>3</comment_count>
      <attachid>76008</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-12 02:15:04 -0800</bug_when>
    <thetext>Comment on attachment 76008
proposed patch

I don&apos;t think attached() is the check you want here. You want to know if it&apos;s in a document, not if it has a renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320851</commentid>
    <comment_count>4</comment_count>
    <who name="Joel">joel</who>
    <bug_when>2010-12-12 09:13:00 -0800</bug_when>
    <thetext>(In reply to comment #0)

http://leosciencelab.com/1.php is the new location</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321596</commentid>
    <comment_count>5</comment_count>
      <attachid>76478</attachid>
    <who name="My Shin">my.shin</who>
    <bug_when>2010-12-13 18:14:25 -0800</bug_when>
    <thetext>Created attachment 76478
proposed patch(2nd)

I changed the condition, &apos;attach()&apos;, to &apos;renderer()&apos;. Thank your comment.
please review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340128</commentid>
    <comment_count>6</comment_count>
      <attachid>76478</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-25 21:22:28 -0800</bug_when>
    <thetext>Comment on attachment 76478
proposed patch(2nd)

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

Also needs to be rebased for after the big Source move.

&gt; WebCore/html/HTMLInputElement.cpp:685
&gt; +        if (renderer())

This is wrong. You can also have a NULL renderer() if you set display:none. eseidel suggested earlier that you&apos;re probably looking for inDocument: http://www.google.com/codesearch/p#OAMlx_jo-ck/src/third_party/WebKit/WebCore/dom/Node.h&amp;l=361&amp;exact_package=chromium

&gt; LayoutTests/fast/forms/radio-checked-by-javascript.html:31
&gt; +    document.write(&quot;This should be checked&quot;);

document.write? ew.

&gt; LayoutTests/fast/forms/radio-checked-by-javascript.html:39
&gt; +var radioElement1, radioElement2, radioElement3, radioElement4;

no need to declare this outside of the function. Could just do var el = document.getElementById(&apos;foo&apos;);

&gt; LayoutTests/fast/forms/radio-checked-by-javascript.html:41
&gt; +    radioElement1 = document.getElementById(&apos;radioID1&apos;);

Can you make this into a helper function that gets an element and verifies if the element is checked? This way you would have a much more elegant code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526074</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-12-21 23:55:38 -0800</bug_when>
    <thetext>*** Bug 74642 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526075</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-12-21 23:59:48 -0800</bug_when>
    <thetext>I&apos;ll handle this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526122</commentid>
    <comment_count>9</comment_count>
      <attachid>120294</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-12-22 02:41:44 -0800</bug_when>
    <thetext>Created attachment 120294
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526165</commentid>
    <comment_count>10</comment_count>
      <attachid>120294</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 03:42:49 -0800</bug_when>
    <thetext>Comment on attachment 120294
WIP

Attachment 120294 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10998415

New failing tests:
fast/forms/removed-image-as-property.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527160</commentid>
    <comment_count>11</comment_count>
      <attachid>120532</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-12-25 23:37:19 -0800</bug_when>
    <thetext>Created attachment 120532
Patch by tkent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527165</commentid>
    <comment_count>12</comment_count>
      <attachid>120535</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-12-26 00:25:04 -0800</bug_when>
    <thetext>Created attachment 120535
Patch by tkent

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527212</commentid>
    <comment_count>13</comment_count>
      <attachid>120535</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-26 07:10:59 -0800</bug_when>
    <thetext>Comment on attachment 120535
Patch by tkent

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

I am not sure we have enough test coverage. Given what I see here in the code, I suspect that radio buttons end up stuck in groups when they should not be there.

&gt; Source/WebCore/dom/CheckedRadioButtons.cpp:72
&gt; -void CheckedRadioButtons::removeButton(HTMLFormControlElement* element)
&gt; +void CheckedRadioButtons::removeButton(HTMLInputElement* element)
&gt;  {
&gt; -    if (element-&gt;name().isEmpty() || !m_nameToCheckedRadioButtonMap)
&gt; +    if (!shouldMakeRadioGroup(element))
&gt; +        return;
&gt; +    if (!m_nameToCheckedRadioButtonMap)
&gt;          return;

I don’t think this function should have been changed, except for changing the type. There is no harm in removing a button from the group if it’s no longer in the document. If this is called and the element is no longer in the document, all the more reason we’d want to remove it from the checked radio button set. In fact, in HTMLInputElement::removedFromDocument, doesn’t inDocument already return false?

&gt; Source/WebCore/html/FormAssociatedElement.cpp:125
&gt; +    if (m_form)
&gt; +        m_form-&gt;removeFormElement(this);

I suggest putting this into FormAssociatedElement::willChangeForm.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:128
&gt; +    if (m_form)
&gt; +        m_form-&gt;registerFormElement(this);

I suggest putting this into FormAssociatedElement::didChangeForm.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:136
&gt; +    willChangeForm();

If the form has already been destroyed, then HTMLInputElement::checkedRadioButtons is going to access a deleted object. So this code won’t work!

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:53
&gt; +    , FormAssociatedElement()

Should be able to just delete this line entirely.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:107
&gt;      if (attr-&gt;name() == formAttr) {
&gt;          formAttributeChanged();
&gt; -        if (!form())
&gt; -            document()-&gt;checkedRadioButtons().addButton(this);
&gt;      } else if (attr-&gt;name() == disabledAttr) {

No braces needed any more since this is now a single line if body.

&gt; Source/WebCore/html/HTMLInputElement.cpp:1500
&gt; +    checkedRadioButtons().removeButton(this);

This should call through to the base class.

&gt; Source/WebCore/html/HTMLInputElement.cpp:1505
&gt; +    checkedRadioButtons().addButton(this);

This should call through to the base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530038</commentid>
    <comment_count>14</comment_count>
      <attachid>120535</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-04 23:43:02 -0800</bug_when>
    <thetext>Comment on attachment 120535
Patch by tkent

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

&gt;&gt; Source/WebCore/dom/CheckedRadioButtons.cpp:72
&gt;&gt;          return;
&gt; 
&gt; I don’t think this function should have been changed, except for changing the type. There is no harm in removing a button from the group if it’s no longer in the document. If this is called and the element is no longer in the document, all the more reason we’d want to remove it from the checked radio button set. In fact, in HTMLInputElement::removedFromDocument, doesn’t inDocument already return false?

At the beginning of HTMLInputElement::removedFromDocument(), inDocument() is still true because Node::removedFromDocument() makes it false and Node::removedFromDocument() is not called yet.  So, the patch works well.
It&apos;s ok to remove the inDocument() check.  The removal is not harmful.  However we&apos;ll have unnecessary HashMap::find() call.

&gt;&gt; Source/WebCore/html/FormAssociatedElement.cpp:125
&gt;&gt; +        m_form-&gt;removeFormElement(this);
&gt; 
&gt; I suggest putting this into FormAssociatedElement::willChangeForm.

will do.

&gt;&gt; Source/WebCore/html/FormAssociatedElement.cpp:136
&gt;&gt; +    willChangeForm();
&gt; 
&gt; If the form has already been destroyed, then HTMLInputElement::checkedRadioButtons is going to access a deleted object. So this code won’t work!

m_form is not deleted yet.  I&apos;ll rename formDestroyed() with willDestroyForm().

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:53
&gt;&gt; +    , FormAssociatedElement()
&gt; 
&gt; Should be able to just delete this line entirely.

will do.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:107
&gt;&gt;      } else if (attr-&gt;name() == disabledAttr) {
&gt; 
&gt; No braces needed any more since this is now a single line if body.

will do.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:1500
&gt;&gt; +    checkedRadioButtons().removeButton(this);
&gt; 
&gt; This should call through to the base class.

will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530056</commentid>
    <comment_count>15</comment_count>
      <attachid>121228</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-05 00:18:49 -0800</bug_when>
    <thetext>Created attachment 121228
Patch by tkent 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530248</commentid>
    <comment_count>16</comment_count>
      <attachid>121272</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-05 06:32:18 -0800</bug_when>
    <thetext>Created attachment 121272
Patch by tkent 4

Add more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531939</commentid>
    <comment_count>17</comment_count>
      <attachid>121272</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-08 20:28:47 -0800</bug_when>
    <thetext>Comment on attachment 121272
Patch by tkent 4

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

Overall looks good, but there is a implementation mistake (virtual functions in derived classes), and an unnecessarily complex design.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:45
&gt; +    setForm(0);

At this point, it is too late to call virtual functions in HTMLInputElement; overrides like HTMLInputElement::willChangeForm and HTMLInputElement::didChangeForm will not get called. That’s because of how C++ destructors work. We’ll need to do this some other way.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:125
&gt; +    willChangeForm();
&gt; +    m_form = newForm;
&gt; +    didChangeForm();

I think the removeFormElement and registerFormElement code should be moved into non-virtual functions, or just put inline directly into the setForm function. Then we can use a single set of virtual functions for both changing forms and disassociating with forms being destroyed. We should have just willChangeForm and didChange form.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:157
&gt; +void FormAssociatedElement::willBeUnassociatedFromDestroyingForm()
&gt; +{
&gt; +}
&gt; +
&gt; +void FormAssociatedElement::wasUnassociatedFromDestroyingForm()
&gt; +{
&gt; +    ASSERT(!m_form);
&gt;  }

A couple language nits. The verb for “association is going away” is “disassociated”. And “destroying form” is a verb phrase, not a noun phrase. So we probably need to rename these. Also, if we’re asserting !m_form in wasUnassociatedFromDestroyingForm we could also assert m_form in willBeUnassociatedFromDestroyingForm.

&gt; Source/WebCore/html/FormAssociatedElement.h:56
&gt; +    void willDestroyForm();

The grammar here gets twisted. Since the element will not be the one destroying the form, the function name here seems clearly wrong. I think formWillBeDestroyed is the name we should use.

And then those other functions above can be named:

    willDisassociateFormThatWillBeDestroyed
    didDisassociateFormThatWillBeDestroyed

Long unpleasant names, but the best I could do. But since my other comments say to remove these functions, I think we’ll be OK.

&gt; Source/WebCore/html/HTMLFormElement.cpp:101
&gt;      for (unsigned i = 0; i &lt; m_associatedElements.size(); ++i)
&gt; -        m_associatedElements[i]-&gt;formDestroyed();
&gt; +        m_associatedElements[i]-&gt;willDestroyForm();

Technically, at this point the form is already partly-destroyed. We can probably get away with this fuzziness, though.

&gt; Source/WebCore/html/HTMLInputElement.cpp:-123
&gt; -    // Need to remove this from the form while it is still an HTMLInputElement,
&gt; -    // so can&apos;t wait for the base class&apos;s destructor to do it.
&gt; -    removeFromForm();

The setForm(0) call will need to be here for the same reason that removeFromForm needed to be here. The refactoring doesn’t change the basic truth that when a base class destructor is called, it can’t call virtual function overrides in derived classes.

I don’t understand why test cases failed to detect this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531940</commentid>
    <comment_count>18</comment_count>
      <attachid>121272</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-08 20:28:52 -0800</bug_when>
    <thetext>Comment on attachment 121272
Patch by tkent 4

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

Overall looks good, but there is a implementation mistake (virtual functions in derived classes), and an unnecessarily complex design.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:45
&gt; +    setForm(0);

At this point, it is too late to call virtual functions in HTMLInputElement; overrides like HTMLInputElement::willChangeForm and HTMLInputElement::didChangeForm will not get called. That’s because of how C++ destructors work. We’ll need to do this some other way.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:125
&gt; +    willChangeForm();
&gt; +    m_form = newForm;
&gt; +    didChangeForm();

I think the removeFormElement and registerFormElement code should be moved into non-virtual functions, or just put inline directly into the setForm function. Then we can use a single set of virtual functions for both changing forms and disassociating with forms being destroyed. We should have just willChangeForm and didChange form.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:157
&gt; +void FormAssociatedElement::willBeUnassociatedFromDestroyingForm()
&gt; +{
&gt; +}
&gt; +
&gt; +void FormAssociatedElement::wasUnassociatedFromDestroyingForm()
&gt; +{
&gt; +    ASSERT(!m_form);
&gt;  }

A couple language nits. The verb for “association is going away” is “disassociated”. And “destroying form” is a verb phrase, not a noun phrase. So we probably need to rename these. Also, if we’re asserting !m_form in wasUnassociatedFromDestroyingForm we could also assert m_form in willBeUnassociatedFromDestroyingForm.

&gt; Source/WebCore/html/FormAssociatedElement.h:56
&gt; +    void willDestroyForm();

The grammar here gets twisted. Since the element will not be the one destroying the form, the function name here seems clearly wrong. I think formWillBeDestroyed is the name we should use.

And then those other functions above can be named:

    willDisassociateFormThatWillBeDestroyed
    didDisassociateFormThatWillBeDestroyed

Long unpleasant names, but the best I could do. But since my other comments say to remove these functions, I think we’ll be OK.

&gt; Source/WebCore/html/HTMLFormElement.cpp:101
&gt;      for (unsigned i = 0; i &lt; m_associatedElements.size(); ++i)
&gt; -        m_associatedElements[i]-&gt;formDestroyed();
&gt; +        m_associatedElements[i]-&gt;willDestroyForm();

Technically, at this point the form is already partly-destroyed. We can probably get away with this fuzziness, though.

&gt; Source/WebCore/html/HTMLInputElement.cpp:-123
&gt; -    // Need to remove this from the form while it is still an HTMLInputElement,
&gt; -    // so can&apos;t wait for the base class&apos;s destructor to do it.
&gt; -    removeFromForm();

The setForm(0) call will need to be here for the same reason that removeFromForm needed to be here. The refactoring doesn’t change the basic truth that when a base class destructor is called, it can’t call virtual function overrides in derived classes.

I don’t understand why test cases failed to detect this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531941</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-08 20:29:14 -0800</bug_when>
    <thetext>Oops, not sure why that submitted twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532797</commentid>
    <comment_count>20</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-09 21:10:42 -0800</bug_when>
    <thetext>(In reply to comment #18)
Thank you for reviewing.

Re: setForm(0) in the destructors.

&gt; &gt; Source/WebCore/html/FormAssociatedElement.cpp:45
&gt; &gt; +    setForm(0);
&gt; 
&gt; At this point, it is too late to call virtual functions in HTMLInputElement; overrides like HTMLInputElement::willChangeForm and HTMLInputElement::didChangeForm will not get called. That’s because of how C++ destructors work. We’ll need to do this some other way.

Unfortunately(?), the code works well because we don&apos;t need to call CheckedRadioButtons::removeButton() from a form control destructor.
 - Usually a form control is removed from the document before being destructed. In this case, we already calls removeButton() in HTMLInputElement::removedFromDocument().
 - We can destruct a in-document from control only if the document is destructed. We don&apos;t need to call removeButton() in such case.

However not calling willChangeForm()/didChangeForm() of subclasses is very confusing and will make problems in the future.  I should change the code.


&gt; &gt; Source/WebCore/html/HTMLInputElement.cpp:-123
&gt; &gt; -    // Need to remove this from the form while it is still an HTMLInputElement,
&gt; &gt; -    // so can&apos;t wait for the base class&apos;s destructor to do it.
&gt; &gt; -    removeFromForm();
&gt; 
&gt; The setForm(0) call will need to be here for the same reason that removeFromForm needed to be here. The refactoring doesn’t change the basic truth that when a base class destructor is called, it can’t call virtual function overrides in derived classes.

This removeFromForm() was required because HTMLFormElement::registerFormElement() used virtual functions of HTMLInputElement for CheckedRadioButtons::removeButton().  This code is unnecessary because of the reasons same as the above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532809</commentid>
    <comment_count>21</comment_count>
      <attachid>121792</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-09 21:51:32 -0800</bug_when>
    <thetext>Created attachment 121792
Patch by tkent 5

Remove *UnassociatedFromDestroyingForm()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533159</commentid>
    <comment_count>22</comment_count>
      <attachid>121792</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-10 10:06:57 -0800</bug_when>
    <thetext>Comment on attachment 121792
Patch by tkent 5

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

&gt; Source/WebCore/ChangeLog:30
&gt; +         Do not update m_form except in setForm() and formDestoryed().

Typo: destoryed

&gt; Source/WebCore/ChangeLog:39
&gt; +        This virtual function is called before the owner form is udpated.

Typo: udpated.

&gt; Source/WebCore/ChangeLog:41
&gt; +        This virtual function is called after the owner form was udpated.

Typo: udpated.

&gt; Source/WebCore/ChangeLog:43
&gt; +        - Renamaed from formDestoryed()

Typos: renamaed and destoryed.

&gt; Source/WebCore/dom/CheckedRadioButtons.cpp:70
&gt; +    if (!element-&gt;isRadioButton())
&gt; +        return;

This is not needed for correctness, so I suggest we leave it out.

If you want to keep it in because it’s a performance optimization, consider that the existing checks are not performance optimizations. The empty name check below is needed, because the name is the key used in the map, so it&apos;s not a performance optimization. Same for the m_nameToCheckedRadioButtonMap check.

If we do want to improve performance here, then we could do the radio button check, but we should consider some other things as well:

1) Besides isRadioButton() we could also consider calling checked(), and use one or both depending on which are more effective at making the code faster.
2) We could change the function so that it only calls name() once, since name does both a function call and a subsequent virtual function call.
3) HTMLInputElement::name could be optimized by overriding the non-virtual name function inherited from FormAssociatedElement.

For (2), the name could be put in a local variable:

    const AtomicString&amp; name = element-&gt;name();

since it’s used twice in the function.

For (3), HTMLInputElement could cut out the function overhead adding a non-virtual name function. Any code that has an HTMLInputElement* would then get the better performance automatically. The simplest way to write it would be:

    const AtomicString&amp; name() { return HTMLInputElement::formElementName(); }

This would compile in a non-virtual call to the formElementName function, which is fine because classes derived from HTMLInputElement do not override formElementName. Or we could optimize even further by creating a function in HTMLInputElement that just returns m_name, since this code handles null and empty names identically. The name/formControlName function has logic to turn a null string into an empty string and we have no need for that here. These functions (either version) could be inline, and the latter one would simply be a direct accessor to a data member. Or we could change FormAssociatedElement::name and FormAssociatedElement::formControlName so that it&apos;s legal to return the null string and change the call sites that don&apos;t already cope with that.

In a mostly unrelated note, when looking at this I noticed a peculiarly-named public function, setDefaultName, that is called only by the HTMLIsIndexElement constructor. We should probably make that function protected. And further, it’s only safe to call that function if the object is not a checkbox, so we might want to assert that. And it’s only correct to call it on an object that doesn’t already have a name, so we might want to assert that m_name is null. And finally, this doesn’t actually work correctly if a name is added and then subsequently removed from the isindex element. That’s probably unimportant because of how rare it is to use the isindex element at all, but annoying that it’s incorrect. That’s the reason the function name is so bad: It doesn’t actually set a default name, just sets an initial name.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:83
&gt;          // Resets the form owner at first to make sure the element don&apos;t
&gt;          // associate any form elements when there is no element which has
&gt;          // the given ID.

This comment no longer makes sense.

&gt; Source/WebCore/html/FormAssociatedElement.cpp:88
&gt;          Element* formElement = element-&gt;treeScope()-&gt;getElementById(element-&gt;fastGetAttribute(formAttr));
&gt;          if (formElement &amp;&amp; formElement-&gt;hasTagName(formTag)) {
&gt; -            m_form = static_cast&lt;HTMLFormElement*&gt;(formElement);
&gt; -            m_form-&gt;registerFormElement(this);
&gt; +            newForm = static_cast&lt;HTMLFormElement*&gt;(formElement);
&gt;          }

Should remove braces here since the function body is now one line. I think we could also consider renaming the local variable formElement, since it’s not always a form element. Might call it something like newFormCandidate.

It is wasteful that this function calls both fastHasAttribute and fastHasAttribute on the same attribute, doing a double hash table lookup. It would be more efficient to only call fastGetAttribute and check for null instead.

It would be good at some point to research if the behavior here is correct. These are the two quirks I noticed:

- If a form attribute gives an ID that is used for an object other than a form that comes earlier in the document than the form, then we don’t associate the element with the form. Even if there is also a form with that ID.
- Changes to the ID of the form or of an object other than the form that comes earlier in the document after the element is inserted into the tree have no effect.

&gt; Source/WebCore/html/FormAssociatedElement.h:73
&gt; +    // If you add an override of willChangeForm() or didChangeForm() to a
&gt; +    // subclass, you need to add setForm(0) to the destructor of the subclass.

Would be better to use the formal C++ term, “class derived from this one” or “derived class”, rather than “subclass”.

I’d say “If you add an override of willChangeForm() or didChangeForm() to a class derived from this one, you will need to add a call to setForm(0) to the destructor of that class&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533161</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-10 10:08:53 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Re: setForm(0) in the destructors.
&gt; 
&gt; &gt; &gt; Source/WebCore/html/FormAssociatedElement.cpp:45
&gt; &gt; &gt; +    setForm(0);
&gt; &gt; 
&gt; &gt; At this point, it is too late to call virtual functions in HTMLInputElement; overrides like HTMLInputElement::willChangeForm and HTMLInputElement::didChangeForm will not get called. That’s because of how C++ destructors work. We’ll need to do this some other way.
&gt; 
&gt; Unfortunately(?), the code works well because we don&apos;t need to call CheckedRadioButtons::removeButton() from a form control destructor.
&gt;  - Usually a form control is removed from the document before being destructed. In this case, we already calls removeButton() in HTMLInputElement::removedFromDocument().
&gt;  - We can destruct a in-document from control only if the document is destructed. We don&apos;t need to call removeButton() in such case.

If the setForm(0) is really effectively dead code, then we could consider an improved design where it’s not needed, replaced with an assertion or something along those lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533595</commentid>
    <comment_count>24</comment_count>
      <attachid>121792</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-10 20:08:12 -0800</bug_when>
    <thetext>Comment on attachment 121792
Patch by tkent 5

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

&gt;&gt; Source/WebCore/ChangeLog:30
&gt;&gt; +         Do not update m_form except in setForm() and formDestoryed().
&gt; 
&gt; Typo: destoryed

Corrected: formDestoryed() -&gt; formWillBeDestroyed()

&gt;&gt; Source/WebCore/ChangeLog:39
&gt;&gt; +        This virtual function is called before the owner form is udpated.
&gt; 
&gt; Typo: udpated.

Corrected.

&gt;&gt; Source/WebCore/ChangeLog:41
&gt;&gt; +        This virtual function is called after the owner form was udpated.
&gt; 
&gt; Typo: udpated.

Corrected.

&gt;&gt; Source/WebCore/ChangeLog:43
&gt;&gt; +        - Renamaed from formDestoryed()
&gt; 
&gt; Typos: renamaed and destoryed.

Corrected.

&gt;&gt; Source/WebCore/html/FormAssociatedElement.cpp:83
&gt;&gt;          // the given ID.
&gt; 
&gt; This comment no longer makes sense.

Removed.

&gt;&gt; Source/WebCore/html/FormAssociatedElement.cpp:88
&gt;&gt;          }
&gt; 
&gt; Should remove braces here since the function body is now one line. I think we could also consider renaming the local variable formElement, since it’s not always a form element. Might call it something like newFormCandidate.
&gt; 
&gt; It is wasteful that this function calls both fastHasAttribute and fastHasAttribute on the same attribute, doing a double hash table lookup. It would be more efficient to only call fastGetAttribute and check for null instead.
&gt; 
&gt; It would be good at some point to research if the behavior here is correct. These are the two quirks I noticed:
&gt; 
&gt; - If a form attribute gives an ID that is used for an object other than a form that comes earlier in the document than the form, then we don’t associate the element with the form. Even if there is also a form with that ID.
&gt; - Changes to the ID of the form or of an object other than the form that comes earlier in the document after the element is inserted into the tree have no effect.

* Removed the braces.
* Renamed: formElement -&gt; newFormCandidate
* Merged the fastHasAttribute() call and the fastGetAttribute() call into one fastGetAttribute() call.

&gt; - If a form attribute gives an ID that is used for an object other than a form that comes earlier in the document than the form, then we don’t associate the element with the form. Even if there is also a form with that ID.

The specification explicitly says that this is a correct behavior.

&gt; - Changes to the ID of the form or of an object other than the form that comes earlier in the document after the element is inserted into the tree have no effect.

I think the current code works consistently in such case.

&gt;&gt; Source/WebCore/html/FormAssociatedElement.h:73
&gt;&gt; +    // subclass, you need to add setForm(0) to the destructor of the subclass.
&gt; 
&gt; Would be better to use the formal C++ term, “class derived from this one” or “derived class”, rather than “subclass”.
&gt; 
&gt; I’d say “If you add an override of willChangeForm() or didChangeForm() to a class derived from this one, you will need to add a call to setForm(0) to the destructor of that class&quot;.

I copied your sentence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533600</commentid>
    <comment_count>25</comment_count>
      <attachid>121792</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-10 20:32:07 -0800</bug_when>
    <thetext>Comment on attachment 121792
Patch by tkent 5

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

&gt;&gt; Source/WebCore/dom/CheckedRadioButtons.cpp:70
&gt;&gt; +        return;
&gt; 
&gt; This is not needed for correctness, so I suggest we leave it out.

I reverted this part.  I&apos;ll improve the performance later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533611</commentid>
    <comment_count>26</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-01-10 21:03:38 -0800</bug_when>
    <thetext>Committed r104668: &lt;http://trac.webkit.org/changeset/104668&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76008</attachid>
            <date>2010-12-08 20:28:41 -0800</date>
            <delta_ts>2010-12-13 18:14:25 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>45719Patch.txt</filename>
            <type>text/plain</type>
            <size>5419</size>
            <attacher name="My Shin">my.shin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMTItMDggIE15U2hpbiAgPG15LnNoaW5Ab2JpZ28uY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyAi
Y2hlY2tlZCIgcmFkaW8gZWxlbWVudCB0byBET00sIGlzbid0IGNoZWNrZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisgICAgICAgIAorICAg
ICAgICBXaGVuIEhUTUxJbnB1dEVsZW1lbnQgaXMgY2xvbmVkIGJ5IGphdmFzY3JpcHQsCisgICAg
ICAgIHRoZSBjbG9uZWQgZWxlbWVudCBoYXZpbmcgY2hlY2tlZCBhbmQgbmFtZSBhdHRyaWJ1dGVz
IGlzIGFkZGVkIHRvIGNoZWNrZWRSYWRpb0J1dHRvbnMgbWFwcywKKyAgICAgICAgb2xkIGNoZWNr
ZWQgcmFkaW8gYnV0dG9uLCBhY3R1YWxseSBzb3VyY2UgZWxlbWVudCwgaXMgc2V0IHRvIHVuLWNo
ZWNrZWQuCisgICAgICAgIFRoZSBjbG9uZWQgZWxlbWVudCBpcyBub3QgYXR0YWNoZWQgeWV0Lgor
ICAgICAgICBTbywgd2UgbmVlZCBjb25kaXRpb24gaW4gb3JkZXIgdG8gY2hlY2sgbm90IGF0dGFj
aGVkIGVsZW1lbnQuCisKKyAgICAgICAgbmV3IHRlc3RzOmZhc3QvZm9ybXMvcmFkaW8tY2hlY2tl
ZC1ieS1qYXZhc2NyaXB0Lmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisKIDIwMTAtMTItMDggIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzM0OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc3LDcgKzY3Nyw4IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyKSB7CiAgICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhp
cyk7CiAgICAgICAgIG1fZGF0YS5zZXROYW1lKGF0dHItPnZhbHVlKCkpOwotICAgICAgICBjaGVj
a2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworICAgICAgICBpZiAoYXR0YWNoZWQo
KSAmJiBjaGVja2VkKCkpCisgICAgICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0
dG9uKHRoaXMpOwogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
dXRvY29tcGxldGVBdHRyKSB7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52
YWx1ZSgpLCAib2ZmIikpIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDk0KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMDgg
IE15U2hpbiAgPG15LnNoaW5Ab2JpZ28uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyAiY2hlY2tlZCIgcmFkaW8gZWxlbWVudCB0byBE
T00sIGlzbid0IGNoZWNrZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1NzE5CisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnkt
amF2YXNjcmlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvcmFk
aW8tY2hlY2tlZC1ieS1qYXZhc2NyaXB0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTA4ICBEYWkg
TWlrdXJ1YmUgIDxkbWlrdXJ1YmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW50IFRhbXVyYS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8tY2hlY2tlZC1i
eS1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNjcmlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNjcmlw
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK1Rlc3RzIGZvciBh
ZGRpbmcgImNoZWNrZWQiIHJhZGlvIGVsZW1lbnQgdG8gRE9NIGJ5IGphdmFzY3JpcHQuIAorYnVn
IDQ1NzE5OiBBZGRpbmcgImNoZWNrZWQiIHJhZGlvIGVsZW1lbnQgdG8gRE9NLCBpcyBub3QgY2hl
Y2tlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMgc2hvdWxkIG5vdCBi
ZSBjaGVja2VkCitUaGlzIHNob3VsZCBub3QgYmUgY2hlY2tlZAorVGhpcyBzaG91bGQgbm90IGJl
IGNoZWNrZWQKK1RoaXMgc2hvdWxkIGJlIGNoZWNrZWQKK1BBU1MgcmFkaW9FbGVtZW50MS5jaGVj
a2VkIGlzIGZhbHNlCitQQVNTIHJhZGlvRWxlbWVudDIuY2hlY2tlZCBpcyBmYWxzZQorUEFTUyBy
YWRpb0VsZW1lbnQzLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgcmFkaW9FbGVtZW50NC5jaGVja2Vk
IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNj
cmlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8tY2hl
Y2tlZC1ieS1qYXZhc2NyaXB0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorCis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKworPGJvZHk+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2PgorPGlu
cHV0IHR5cGU9InJhZGlvIiBuYW1lPSJncm91cDEiIGNoZWNrZWQ9ImNoZWNrZWQiIGlkPSJyYWRp
b0lEMSI+VGhpcyBzaG91bGQgbm90IGJlIGNoZWNrZWQ8YnI+Cis8aW5wdXQgdHlwZT0icmFkaW8i
IG5hbWU9Imdyb3VwMSIgY2hlY2tlZD0iY2hlY2tlZCIgaWQ9InJhZGlvSUQyIj5UaGlzIHNob3Vs
ZCBub3QgYmUgY2hlY2tlZDxicj4KKzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZ3JvdXAxIiBp
ZD0icmFkaW9JRDMiPlRoaXMgc2hvdWxkIG5vdCBiZSBjaGVja2VkPGJyPgorPC9kaXY+Cis8c2Ny
aXB0PgorICAgIHZhciBpbnB1dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIp
OworICAgIGlucHV0Tm9kZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCAiY2hlY2tlZCIpOworICAg
IGlucHV0Tm9kZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAicmFkaW8iKTsKKyAgICBpbnB1dE5vZGUu
c2V0QXR0cmlidXRlKCJuYW1lIiwgImdyb3VwMSIpOworICAgIGlucHV0Tm9kZS5zZXRBdHRyaWJ1
dGUoImlkIiwgInJhZGlvSUQ0Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1
dE5vZGUpOworCisgICAgdmFyIHRlbXAgPSBpbnB1dE5vZGUuY2xvbmVOb2RlKHRydWUpOworICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcCk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1v
dmVDaGlsZChpbnB1dE5vZGUpOworCisgICAgZG9jdW1lbnQud3JpdGUoIlRoaXMgc2hvdWxkIGJl
IGNoZWNrZWQiKTsKKzwvc2NyaXB0PgorCisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgYWRkaW5nICJjaGVja2VkIiByYWRpbyBlbGVt
ZW50IHRvIERPTSBieSBqYXZhc2NyaXB0LiA8YnIvPiA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3MTkiPmJ1ZyA0NTcxOTwvYT46IEFkZGluZyAiY2hl
Y2tlZCIgcmFkaW8gZWxlbWVudCB0byBET00sIGlzIG5vdCBjaGVja2VkLicpOworCit2YXIgcmFk
aW9FbGVtZW50MSwgcmFkaW9FbGVtZW50MiwgcmFkaW9FbGVtZW50MywgcmFkaW9FbGVtZW50NDsK
K2Z1bmN0aW9uIHJ1blRlc3RzKCkgeworICAgIHJhZGlvRWxlbWVudDEgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgncmFkaW9JRDEnKTsKKyAgICByYWRpb0VsZW1lbnQyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3JhZGlvSUQyJyk7CisgICAgcmFkaW9FbGVtZW50MyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdyYWRpb0lEMycpOworICAgIHJhZGlvRWxlbWVudDQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncmFkaW9JRDQnKTsKKyAgICBzaG91bGRCZUZhbHNlKCdyYWRpb0VsZW1l
bnQxLmNoZWNrZWQnKTsKKyAgICBzaG91bGRCZUZhbHNlKCdyYWRpb0VsZW1lbnQyLmNoZWNrZWQn
KTsKKyAgICBzaG91bGRCZUZhbHNlKCdyYWRpb0VsZW1lbnQzLmNoZWNrZWQnKTsKKyAgICBzaG91
bGRCZVRydWUoJ3JhZGlvRWxlbWVudDQuY2hlY2tlZCcpOworfQorCitydW5UZXN0cygpOwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4gIAorPHNjcmlwdCBzcmM9Ii4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgorCg==
</data>
<flag name="review"
          id="66877"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76478</attachid>
            <date>2010-12-13 18:14:25 -0800</date>
            <delta_ts>2011-12-22 02:41:38 -0800</delta_ts>
            <desc>proposed patch(2nd)</desc>
            <filename>45719_1Patch.txt</filename>
            <type>text/plain</type>
            <size>5428</size>
            <attacher name="My Shin">my.shin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzk5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMTItMTMgIE15U2hpbiAgPG15LnNoaW5Ab2JpZ28uY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyAi
Y2hlY2tlZCIgcmFkaW8gZWxlbWVudCB0byBET00sIGlzbid0IGNoZWNrZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisgICAgICAgIAorICAg
ICAgICBXaGVuIEhUTUxJbnB1dEVsZW1lbnQgaXMgY2xvbmVkIGJ5IGphdmFzY3JpcHQsCisgICAg
ICAgIHRoZSBjbG9uZWQgZWxlbWVudCBoYXZpbmcgY2hlY2tlZCBhbmQgbmFtZSBhdHRyaWJ1dGVz
IGlzIGFkZGVkIHRvIGNoZWNrZWRSYWRpb0J1dHRvbnMgbWFwcywKKyAgICAgICAgb2xkIGNoZWNr
ZWQgcmFkaW8gYnV0dG9uLCBhY3R1YWxseSBzb3VyY2UgZWxlbWVudCwgaXMgc2V0IHRvIHVuLWNo
ZWNrZWQuCisgICAgICAgIFRoZSBjbG9uZWQgZWxlbWVudCBpcyBub3QgYXR0YWNoZWQgeWV0Lgor
ICAgICAgICBTbywgd2UgbmVlZCBjb25kaXRpb24gaW4gb3JkZXIgdG8gY2hlY2sgbm90IGF0dGFj
aGVkIGVsZW1lbnQuCisKKyAgICAgICAgbmV3IHRlc3RzOmZhc3QvZm9ybXMvcmFkaW8tY2hlY2tl
ZC1ieS1qYXZhc2NyaXB0Lmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisKIDIwMTAtMTItMTMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSdWJiZXItc3RhbXBlZCBieSBKb24gSG9uZXljdXR0LgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzM5NTUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsOCBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBu
YW1lQXR0cikgewogICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRo
aXMpOwogICAgICAgICBtX2RhdGEuc2V0TmFtZShhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgY2hl
Y2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCisgICAgICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwog
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVB
dHRyKSB7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAib2Zm
IikpIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczOTkxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMTMgIE15U2hpbiAgPG15
LnNoaW5Ab2JpZ28uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGluZyAiY2hlY2tlZCIgcmFkaW8gZWxlbWVudCB0byBET00sIGlzbid0IGNo
ZWNrZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NzE5CisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNjcmlwdC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvcmFkaW8tY2hlY2tlZC1i
eS1qYXZhc2NyaXB0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTEzICBKb24gSG9uZXljdXR0ICA8
amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFk
aW8tY2hlY2tlZC1ieS1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNjcmlwdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQt
YnktamF2YXNjcmlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAK
K1Rlc3RzIGZvciBhZGRpbmcgImNoZWNrZWQiIHJhZGlvIGVsZW1lbnQgdG8gRE9NIGJ5IGphdmFz
Y3JpcHQuIAorYnVnIDQ1NzE5OiBBZGRpbmcgImNoZWNrZWQiIHJhZGlvIGVsZW1lbnQgdG8gRE9N
LCBpcyBub3QgY2hlY2tlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMg
c2hvdWxkIG5vdCBiZSBjaGVja2VkCitUaGlzIHNob3VsZCBub3QgYmUgY2hlY2tlZAorVGhpcyBz
aG91bGQgbm90IGJlIGNoZWNrZWQKK1RoaXMgc2hvdWxkIGJlIGNoZWNrZWQKK1BBU1MgcmFkaW9F
bGVtZW50MS5jaGVja2VkIGlzIGZhbHNlCitQQVNTIHJhZGlvRWxlbWVudDIuY2hlY2tlZCBpcyBm
YWxzZQorUEFTUyByYWRpb0VsZW1lbnQzLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgcmFkaW9FbGVt
ZW50NC5jaGVja2VkIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvLWNoZWNr
ZWQtYnktamF2YXNjcmlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvcmFkaW8tY2hlY2tlZC1ieS1qYXZhc2NyaXB0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvLWNoZWNrZWQtYnktamF2YXNjcmlwdC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+DQorPGh0bWw+DQorPGhlYWQ+DQorPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4NCisNCis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorDQorPGJvZHk+DQorDQorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+DQorDQorPGRpdj4NCis8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Imdyb3VwMSIg
Y2hlY2tlZD0iY2hlY2tlZCIgaWQ9InJhZGlvSUQxIj5UaGlzIHNob3VsZCBub3QgYmUgY2hlY2tl
ZDxicj4NCis8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Imdyb3VwMSIgY2hlY2tlZD0iY2hlY2tl
ZCIgaWQ9InJhZGlvSUQyIj5UaGlzIHNob3VsZCBub3QgYmUgY2hlY2tlZDxicj4NCis8aW5wdXQg
dHlwZT0icmFkaW8iIG5hbWU9Imdyb3VwMSIgaWQ9InJhZGlvSUQzIj5UaGlzIHNob3VsZCBub3Qg
YmUgY2hlY2tlZDxicj4NCis8L2Rpdj4NCis8c2NyaXB0Pg0KKyAgICB2YXIgaW5wdXROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsNCisgICAgaW5wdXROb2RlLnNldEF0dHJp
YnV0ZSgiY2hlY2tlZCIsICJjaGVja2VkIik7DQorICAgIGlucHV0Tm9kZS5zZXRBdHRyaWJ1dGUo
InR5cGUiLCAicmFkaW8iKTsNCisgICAgaW5wdXROb2RlLnNldEF0dHJpYnV0ZSgibmFtZSIsICJn
cm91cDEiKTsNCisgICAgaW5wdXROb2RlLnNldEF0dHJpYnV0ZSgiaWQiLCAicmFkaW9JRDQiKTsN
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dE5vZGUpOw0KKw0KKyAgICB2YXIg
dGVtcCA9IGlucHV0Tm9kZS5jbG9uZU5vZGUodHJ1ZSk7DQorICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGVtcCk7DQorICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXROb2Rl
KTsNCisNCisgICAgZG9jdW1lbnQud3JpdGUoIlRoaXMgc2hvdWxkIGJlIGNoZWNrZWQiKTsNCis8
L3NjcmlwdD4NCisNCisNCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4NCis8c2NyaXB0Pg0KK2Rl
c2NyaXB0aW9uKCdUZXN0cyBmb3IgYWRkaW5nICJjaGVja2VkIiByYWRpbyBlbGVtZW50IHRvIERP
TSBieSBqYXZhc2NyaXB0LiA8YnIvPiA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDU3MTkiPmJ1ZyA0NTcxOTwvYT46IEFkZGluZyAiY2hlY2tlZCIgcmFk
aW8gZWxlbWVudCB0byBET00sIGlzIG5vdCBjaGVja2VkLicpOw0KKw0KK3ZhciByYWRpb0VsZW1l
bnQxLCByYWRpb0VsZW1lbnQyLCByYWRpb0VsZW1lbnQzLCByYWRpb0VsZW1lbnQ0Ow0KK2Z1bmN0
aW9uIHJ1blRlc3RzKCkgew0KKyAgICByYWRpb0VsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3JhZGlvSUQxJyk7DQorICAgIHJhZGlvRWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgncmFkaW9JRDInKTsNCisgICAgcmFkaW9FbGVtZW50MyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdyYWRpb0lEMycpOw0KKyAgICByYWRpb0VsZW1lbnQ0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3JhZGlvSUQ0Jyk7DQorICAgIHNob3VsZEJlRmFsc2UoJ3JhZGlvRWxlbWVu
dDEuY2hlY2tlZCcpOw0KKyAgICBzaG91bGRCZUZhbHNlKCdyYWRpb0VsZW1lbnQyLmNoZWNrZWQn
KTsNCisgICAgc2hvdWxkQmVGYWxzZSgncmFkaW9FbGVtZW50My5jaGVja2VkJyk7DQorICAgIHNo
b3VsZEJlVHJ1ZSgncmFkaW9FbGVtZW50NC5jaGVja2VkJyk7DQorfQ0KKw0KK3J1blRlc3RzKCk7
DQordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7DQorPC9zY3JpcHQ+ICANCis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+DQorPC9ib2R5
Pg0KKzwvaHRtbD4KKw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120294</attachid>
            <date>2011-12-22 02:41:44 -0800</date>
            <delta_ts>2011-12-25 23:37:10 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-45719-20111222194142.patch</filename>
            <type>text/plain</type>
            <size>18676</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzE3MjA5ZWNlYTBhMjQz
ZGUxNWEwY2QyZGIzNTNmNTc3YzU1M2ZjMS4uZWFmYTNiZWI0MDhiM2RjNjY0MWM1YjRiNTg3MzU1
Njg3ZWY2YTJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDExLTEyLTIyICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBEb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiAoT09QUyEpCisKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzaG91bGRNYWtlUmFkaW9Hcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpD
aGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tl
ZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlv
QnV0dG9ucy5oOgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpzZXRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6d2lsbENoYW5nZUZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50OjpkaWRDaGFuZ2VGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6cmVzZXRGb3JtT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRF
bGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250
cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+
SFRNTEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJl
Z2lzdGVyRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpy
ZW1vdmVGb3JtRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpb0J1
dHRvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6d2lsbENoYW5nZUZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlkQ2hhbmdlRm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdP
d25lckRvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
YmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KToKKwogMjAxMS0xMi0yMSAgS2VudCBU
YW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2hhbmdlIHRoZSBpdGVtIHR5
cGUgb2YgRG9jdW1lbnQ6Om1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlIGZyb20gRWxlbWVudCoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCAzOGU1ZWZiYmM5
MWM2MGNjYjQ1YTU0NjZlNWZiNGIyOWMwNzQxYWUwLi40ZTc4ODRjMzE2Y2M4NjIxMGU5Yzg4NzNl
YzI4N2I2Y2UwZWFkOWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCkBAIC0yNSwzNCArMjUsMzIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBl
bGVtZW50KQorc3RhdGljIGlubGluZSBib29sIHNob3VsZE1ha2VSYWRpb0dyb3VwKEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCByYWRpbyBi
dXR0b25zLgotICAgIGlmICghZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQotICAgICAgICByZXR1
cm47CisgICAgcmV0dXJuIGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSAmJiAhZWxlbWVudC0+bmFt
ZSgpLmlzRW1wdHkoKSAmJiBlbGVtZW50LT5pbkRvY3VtZW50KCk7Cit9CiAKLSAgICAvLyBXaXRo
b3V0IGEgbmFtZSwgdGhlcmUgaXMgbm8gZ3JvdXAuCi0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5p
c0VtcHR5KCkpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghc2hvdWxkTWFrZVJhZGlvR3JvdXAoZWxlbWVu
dCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKLQogICAgIC8vIFdl
IG9ubHkgdHJhY2sgY2hlY2tlZCBidXR0b25zLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5jaGVj
a2VkKCkpCisgICAgaWYgKCFlbGVtZW50LT5jaGVja2VkKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIG1fbmFtZVRv
Q2hlY2tlZFJhZGlvQnV0dG9uTWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0lucHV0TWFwKTsKIAot
ICAgIHBhaXI8TmFtZVRvSW5wdXRNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX25hbWVU
b0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIGlucHV0
RWxlbWVudCk7CisgICAgcGFpcjxOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3Vs
dCA9IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmlt
cGwoKSwgZWxlbWVudCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBIVE1MSW5wdXRFbGVtZW50KiBvbGRDaGVja2VkQnV0dG9uID0gcmVzdWx0LmZp
cnN0LT5zZWNvbmQ7Ci0gICAgaWYgKG9sZENoZWNrZWRCdXR0b24gPT0gaW5wdXRFbGVtZW50KQor
ICAgIGlmIChvbGRDaGVja2VkQnV0dG9uID09IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gaW5wdXRFbGVtZW50OworICAgIHJlc3VsdC5maXJz
dC0+c2Vjb25kID0gZWxlbWVudDsKICAgICBvbGRDaGVja2VkQnV0dG9uLT5zZXRDaGVja2VkKGZh
bHNlKTsKIH0KIApAQCAtNjYsOSArNjQsMTEgQEAgSFRNTElucHV0RWxlbWVudCogQ2hlY2tlZFJh
ZGlvQnV0dG9uczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYKICAg
ICByZXR1cm4gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmdldChuYW1lLmltcGwoKSk7
CiB9CiAKLXZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1
dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChlbGVtZW50LT5uYW1l
KCkuaXNFbXB0eSgpIHx8ICFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKKyAgICBpZiAo
IXNob3VsZE1ha2VSYWRpb0dyb3VwKGVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5jaGVja0NvbnNpc3RlbmN5KCk7CkBA
IC03Nyw5ICs3Nyw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fbmFtZVRvQ2hl
Y2tlZFJhZGlvQnV0dG9uTWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9IGVsZW1lbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBl
bGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoaW5wdXRFbGVtZW50
LCBpbnB1dEVsZW1lbnQpOwotICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNo
ZWNrZWQoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSk7CiAg
ICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7CiAKICAgICBtX25hbWVUb0NoZWNr
ZWRSYWRpb0J1dHRvbk1hcC0+cmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5oCmluZGV4IDBmYTQ1N2FjYjQ2MmQ3ZWJlMWFjYzVhN2U5YTlmMDNjZjM4ZTll
ODEuLjkyNWI1MDY3ODJhNDFjMjdkMTU0N2VmMDE5OWFkOTVmNWJkYTMyMjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaApAQCAtMjcsMTMgKzI3LDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNz
IEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIENoZWNrZWRSYWRpb0J1dHRvbnMgewogcHVibGlj
OgotICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB2b2lk
IHJlbW92ZUJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdm9pZCBhZGRCdXR0
b24oSFRNTElucHV0RWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVs
ZW1lbnQqKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9yR3JvdXAoY29u
c3QgQXRvbWljU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDFkZGI2YTY1YzI2
NjJmMDk4YTgzMDM5MWZjYmUxMTQwMWFiMjE2NjMuLjJhZTY5MjdlNmFlNjJiZTMwZWU0ODY1MDBi
YmE3M2M1NDQzMzliMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVk
RWxlbWVudC5jcHAKQEAgLTM1LDEzICszNSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFz
c29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IG1fZm9ybShmb3Jt
KQorRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKQorICAgIDog
bV9mb3JtKDApCiB7CiB9CiAKIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lhdGVk
RWxlbWVudCgpCiB7CisgICAgc2V0Rm9ybSgwKTsKIH0KIAogVmFsaWRpdHlTdGF0ZSogRm9ybUFz
c29jaWF0ZWRFbGVtZW50Ojp2YWxpZGl0eSgpCkBAIC04MCwxNSArODEsMTIgQEAgdm9pZCBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogICAgICAgICAvLyBSZXNldHMg
dGhlIGZvcm0gb3duZXIgYXQgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSBlbGVtZW50IGRvbid0CiAg
ICAgICAgIC8vIGFzc29jaWF0ZSBhbnkgZm9ybSBlbGVtZW50cyB3aGVuIHRoZXJlIGlzIG5vIGVs
ZW1lbnQgd2hpY2ggaGFzCiAgICAgICAgIC8vIHRoZSBnaXZlbiBJRC4KLSAgICAgICAgaWYgKG1f
Zm9ybSkgewotICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAg
ICAgICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgSFRNTEZvcm1FbGVtZW50
KiBuZXdGb3JtID0gMDsKICAgICAgICAgRWxlbWVudCogZm9ybUVsZW1lbnQgPSBlbGVtZW50LT50
cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShmb3Jt
QXR0cikpOwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQtPmhhc1RhZ05h
bWUoZm9ybVRhZykpIHsKLSAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3Jt
RWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG5ld0Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICAgIH0KKyAgICAgICAgc2V0Rm9ybShuZXdG
b3JtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fZm9ybSkgewpAQCAtOTYs
OSArOTQsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgp
CiAgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0
aGUgY2FzZSBvZiB0aGUgcGFyc2VyCiAgICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxs
IGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAgICAgIC8vIGFu
ZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBlbGVt
ZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAg
ICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIHNldEZvcm0oZWxl
bWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKICAgICB9CiB9CiAKQEAgLTExNywxNSArMTEzLDI2
IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKQogICAgIC8v
IElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNl
cnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgogICAgIC8vIE90aGVyd2lzZSwgbnVsbCBv
dXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2Yg
ZWxlbWVudHMuCiAgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50KSAhPSBmaW5kUm9v
dChtX2Zvcm0pKQotICAgICAgICByZW1vdmVGcm9tRm9ybSgpOworICAgICAgICBzZXRGb3JtKDAp
OwogfQogCi12b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQordm9p
ZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0oSFRNTEZvcm1FbGVtZW50KiBuZXdGb3Jt
KQoreworICAgIHdpbGxDaGFuZ2VGb3JtKCk7CisgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgbV9m
b3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBtX2Zvcm0gPSBuZXdGb3JtOworICAg
IGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsK
KyAgICBkaWRDaGFuZ2VGb3JtKCk7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3
aWxsQ2hhbmdlRm9ybSgpCit7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRD
aGFuZ2VGb3JtKCkKIHsKLSAgICBpZiAoIW1fZm9ybSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgbV9mb3JtID0gMDsKIH0KIAogdm9p
ZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKCkKQEAgLTEzNSw5ICsxNDIs
OCBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIoKQogICAgIGlm
IChtX2Zvcm0pIHsKICAgICAgICAgaWYgKGZvcm1JZC5pc051bGwoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKICAgICB9Ci0g
ICAgbV9mb3JtID0gMDsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSAwOwogICAgIGlm
ICghZm9ybUlkLmlzTnVsbCgpICYmIGVsZW1lbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICAv
LyBUaGUgSFRNTDUgc3BlYyBzYXlzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGFzc29jaWF0
ZWQgd2l0aAogICAgICAgICAvLyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8g
aGF2ZSBhbiBJRCB0aGF0IGVxdWFsIHRvCkBAIC0xNDUsMTEgKzE1MSwxMCBAQCB2b2lkIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIoKQogICAgICAgICAvLyB0cmVlU2NvcGUo
KS0+Z2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBnaXZlbiBlbGVtZW50LgogICAgICAgICBFbGVt
ZW50KiBmaXJzdEVsZW1lbnQgPSBlbGVtZW50LT50cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQo
Zm9ybUlkKTsKICAgICAgICAgaWYgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhhc1Rh
Z05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOworICAgICAgICAgICAgbmV3Rm9ybSA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICBpZiAobV9mb3JtKQot
ICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIG5ld0Zv
cm0gPSBlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7CisgICAgc2V0Rm9ybShuZXdGb3JtKTsK
IH0KIAogdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCkK
QEAgLTE1NywxMSArMTYyLDcgQEAgdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1BdHRy
aWJ1dGVDaGFuZ2VkKCkKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQo
dGhpcyk7CiAgICAgaWYgKCFlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewog
ICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBm
b3JtIG93bmVyIGhlcmUuCi0gICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAgICBtX2Zvcm0t
PnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBtX2Zvcm0gPSBlbGVtZW50LT5maW5k
Rm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAgICBmb3JtKCkt
PnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIHNldEZvcm0oZWxlbWVudC0+Zmlu
ZEZvcm1BbmNlc3RvcigpKTsKICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CiAgICAgfSBlbHNlCiAgICAgICAg
IHJlc2V0Rm9ybU93bmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVs
ZW1lbnQuaAppbmRleCA1YTg2MWUyNzI2MWI2NzUzOGYwMGIwZjIwYTIyMmY4NjU0YzQzNTQyLi43
MWFlNzQyNGJlNzIxMmQ3NTBlYmExODMxYmFjYWViNDZhNTdkYTkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoKTsKIAogcHJvdGVjdGVkOgotICAgIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQoKTsKIAogICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpOwogICAgIHZvaWQgcmVtb3ZlZEZy
b21UcmVlKCk7CkBAIC02NiwxMCArNjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwogICAgIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
IAotICAgIHZvaWQgc2V0Rm9ybShIVE1MRm9ybUVsZW1lbnQqIGZvcm0pIHsgbV9mb3JtID0gZm9y
bTsgfQotICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICB2b2lkIHNldEZvcm0oSFRNTEZv
cm1FbGVtZW50Kik7CiAgICAgdm9pZCBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOwogCisgICAgdmly
dHVhbCB2b2lkIHdpbGxDaGFuZ2VGb3JtKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUZv
cm0oKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNv
bnRyb2xOYW1lKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAwNzA0NDQ4NzYyYmIzYzkyYzQwMTFhMTNjNWNmNDY5
ZWY4YjZjNDJlLi4xNDEwNGYxYmQ5ZDA5NDQ2YTNlYTkxZmQ4ODI0NjA5YWM2ZWY5YjYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTUw
LDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KGZvcm0p
CisgICAgLCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKQogICAgICwgbV9kaXNhYmxlZChmYWxzZSkK
ICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQpAQCAtNjEs
MTggKzYxLDEyIEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jCiAgICAgLCBtX3dhc0NoYW5nZWRT
aW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGZhbHNlKQogICAgICwgbV9oYXNBdXRvZm9j
dXNlZChmYWxzZSkKIHsKLSAgICBpZiAoIXRoaXMtPmZvcm0oKSkKLSAgICAgICAgc2V0Rm9ybShm
aW5kRm9ybUFuY2VzdG9yKCkpOwotICAgIGlmICh0aGlzLT5mb3JtKCkpCi0gICAgICAgIHRoaXMt
PmZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLQorICAgIHNldEZvcm0oZm9ybSA/
IGZvcm0gOiBmaW5kRm9ybUFuY2VzdG9yKCkpOwogICAgIHNldEhhc0N1c3RvbVdpbGxPckRpZFJl
Y2FsY1N0eWxlKCk7CiB9CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRy
b2xFbGVtZW50KCkKIHsKLSAgICBpZiAoZm9ybSgpKQotICAgICAgICBmb3JtKCktPnJlbW92ZUZv
cm1FbGVtZW50KHRoaXMpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFj
aCgpCkBAIC0xMTAsOCArMTA0LDYgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBmb3JtQXR0cikgewogICAgICAgICBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOwotICAgICAg
ICBpZiAoIWZvcm0oKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRv
bnMoKS5hZGRCdXR0b24odGhpcyk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlz
YWJsZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rpc2FibGVkOwogICAg
ICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwpAQCAtMjA1LDkgKzE5Nyw2IEBAIHZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQog
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkK
IHsKICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKLSAgICBp
ZiAoIWZvcm0oKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFk
ZEJ1dHRvbih0aGlzKTsKLQogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXAp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNWE4ZWNh
Mzg5NjM2NDQ1NGFlMzMyNjE1OTI4NTc5NjgzYzliNWE1My4uYjk1Y2ZhZDgyYWFhM2I0NmQ3MTI4
ODFlYTE0Njk2MzgwZGY0Y2JjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcApAQCAtNDcwLDE4ICs0NzAsMTEgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3Jt
RWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW0KIAogdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVt
ZW50KiBlKQogewotICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7Ci0gICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4oZSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRv
bnMoKS5yZW1vdmVCdXR0b24oZWxlbWVudCk7Ci0gICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9u
cy5hZGRCdXR0b24oZWxlbWVudCk7Ci0gICAgfQogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmlu
c2VydChmb3JtRWxlbWVudEluZGV4KGUpLCBlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlbW92ZUZvcm1FbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBpZiAo
ZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgbV9jaGVja2VkUmFkaW9CdXR0b25z
LnJlbW92ZUJ1dHRvbihzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZSkpOwog
ICAgIHVuc2lnbmVkIGluZGV4OwogICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAobV9hc3NvY2lhdGVk
RWxlbWVudHNbaW5kZXhdID09IGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAppbmRleCAyMTRlNWM0ZWU5ZWQ2NzhhODA1YTc5MDBhNWIwNDNiNjM4OTE5YjcxLi4xNTA4
OGY5ZGVjMGY3ZmM3ODU4M2E5ZThlODQzZTUyYzE2MmJiY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTExNiwxMSArMTE2LDkgQEAgSFRNTElucHV0RWxl
bWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFj
aygpKQogICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lv
bkNhbGxiYWNrcyh0aGlzKTsKIAotICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMo
KS5yZW1vdmVCdXR0b24odGhpcyk7Ci0KICAgICAvLyBOZWVkIHRvIHJlbW92ZSB0aGlzIGZyb20g
dGhlIGZvcm0gd2hpbGUgaXQgaXMgc3RpbGwgYW4gSFRNTElucHV0RWxlbWVudCwKICAgICAvLyBz
byBjYW4ndCB3YWl0IGZvciB0aGUgYmFzZSBjbGFzcydzIGRlc3RydWN0b3IgdG8gZG8gaXQuCi0g
ICAgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICBzZXRGb3JtKDApOwogfQogCiBjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0CkBAIC0xNzks
OCArMTc3LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRBdXRvY29tcGxldGUoKSBj
b25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMo
KQogewotICAgIGlmIChhdHRhY2hlZCgpICYmIGNoZWNrZWQoKSkKLSAgICAgICAgY2hlY2tlZFJh
ZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCku
YWRkQnV0dG9uKHRoaXMpOwogCiAgICAgaWYgKGZvcm0oKSkgewogICAgICAgICBjb25zdCBWZWN0
b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGNvbnRyb2xzID0gZm9ybSgpLT5hc3NvY2lhdGVk
RWxlbWVudHMoKTsKQEAgLTE1MDIsNiArMTQ5OSwyOCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpCiAgICAgcmVzZXQoKTsKIH0KIAordm9p
ZCBIVE1MSW5wdXRFbGVtZW50Ojp3aWxsQ2hhbmdlRm9ybSgpCit7CisgICAgY2hlY2tlZFJhZGlv
QnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpkaWRDaGFuZ2VGb3JtKCkKK3sKKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9u
KHRoaXMpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKK3sKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKTsKKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworfQorCit2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQoreworICAgIGNoZWNr
ZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKK30KKwogdm9pZCBIVE1MSW5wdXRF
bGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCiB7CiAgICAgbV9pbnB1dFR5cGUt
PndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CkBAIC0xNTEwLDggKzE1MjksNiBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKICAgICBpZiAo
bmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3Rl
ckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CiAKLSAgICBkb2N1bWVudCgp
LT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwotCiAgICAgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggNzg2N2EzMmVjM2JmNzZm
MjEwNGQ1ZTllZDI2ODU1MDZmNTc3ZTgxYi4uYWJiNTNkODcyZWI0ZGU3OTk3YmMzOWVhODY2N2Q3
MDAwN2RlMThiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTI0
OSw2ICsyNDksMTAgQEAgcHJpdmF0ZToKICAgICBlbnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBV
bmluaXRpYWxpemVkLCBPbiwgT2ZmIH07CiAgICAgZW51bSBBbnlTdGVwSGFuZGxpbmcgeyBSZWpl
Y3RBbnksIEFueUlzRGVmYXVsdFN0ZXAgfTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdl
Rm9ybSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VGb3JtKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwCmluZGV4IGE5ZTFmMDRiMTY2ZDBlYzkxN2E4YTY0NzYxNjk1ZGYzMGQ4
NTg1NGMuLmY1ZDY4NGU3MDMwZTRiYzgzNmQzYTA5MjQ4MzljNDIwNTBmNzg1NDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01NSwyMSArNTUsMTYgQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogaW5saW5lIEhUTUxPYmplY3RFbGVtZW50OjpI
VE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpIAog
ICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5
UGFyc2VyLCBTaG91bGROb3RQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQotICAgICwgRm9ybUFzc29j
aWF0ZWRFbGVtZW50KGZvcm0pCisgICAgLCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKQogICAgICwg
bV9kb2NOYW1lZEl0ZW0odHJ1ZSkKICAgICAsIG1fdXNlRmFsbGJhY2tDb250ZW50KGZhbHNlKQog
ewogICAgIEFTU0VSVChoYXNUYWdOYW1lKG9iamVjdFRhZykpOwotICAgIGlmICghdGhpcy0+Zm9y
bSgpKQotICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7Ci0gICAgaWYgKHRoaXMt
PmZvcm0oKSkKLSAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMp
OworICAgIHNldEZvcm0oZm9ybSA/IGZvcm0gOiBmaW5kRm9ybUFuY2VzdG9yKCkpOwogfQogCiBp
bmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7Ci0gICAgaWYg
KGZvcm0oKSkKLSAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAog
UGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120532</attachid>
            <date>2011-12-25 23:37:19 -0800</date>
            <delta_ts>2011-12-26 00:24:57 -0800</delta_ts>
            <desc>Patch by tkent</desc>
            <filename>bug-45719-20111226163717.patch</filename>
            <type>text/plain</type>
            <size>28527</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmMyNjQwYmM3MDE1NjQ2
ZjgwNDk1NzYzNTUwNGEwZDIzNDc2MzA0Ni4uZmQyZTExYzkyNGY0N2E1ZjYzZjFhMDljZGQxMzAx
ZWUyMTFmMGFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDExLTEyLTI1ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBkb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgcGVyIHRoZSBz
dGFuZGFyZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvcnMsIHdlIHNob3VsZCBub3QgYWRkIGEK
KyAgICAgICAgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGRvY3VtZW50IHRvIGEgcmFkaW8gYnV0dG9u
IGdyb3VwLgorCisgICAgICAgIFNvLCBDaGVja2VkUmFkaW9CdXR0b24gbWVtYmVyIGZ1bmN0aW9u
cyBzaG91bGQgYmUgY2FsbGVkIGluCisgICAgICAgIGluc2VydGVkSW50b0RvY3VtZW50KCkgYW5k
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKSwgYW5kIHRoZXkgc2hvdWxkIGRvCisgICAgICAgIG5vdGhp
bmcgaWYgdGhlIHNwZWNpZmllZCByYWRpbyBidXR0b24gaXMgbm90IGluIGEgZG9jdW1lbnQuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBhIGJ1ZyB0aGF0IGZvcm0gb3duZXIgY2hh
bmdlIGJ5ICdmb3JtJyBhdHRyaWJ1dGUKKyAgICAgICAgZGlkbid0IHVwZGF0ZSByYWRpbyBidXR0
b24gZ3JvdXBzIGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3JhZGlvL3Jh
ZGlvLWdyb3VwLmh0bWwKKworICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNob3VsZE1ha2VSYWRpb0dyb3VwKTogQSBoZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgPGlucHV0PiBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRp
b0J1dHRvbnM6OmFkZEJ1dHRvbik6CisgICAgICAgIC0gQ2hhbmdlIHRoZSBhcmd1bWVudCB0eXBl
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAg
LSBVc2Ugc2hvdWxkTWFrZVJhZGlvR3JvdXAoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6IGRpdHRvLgorICAgICAgICAqIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmg6CisgICAgICAgICBDaGFuZ2UgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIGFk
ZEJ1dHRvbigpIGFuZCByZW1vdmVCdXR0b24oKToKKyAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIC0+IEhUTUxJbnB1dEVsZW1lbnQqLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgIERvIG5vdCB1cGRhdGUgbV9mb3JtIGV4Y2VwdCBpbiBz
ZXRGb3JtKCkgYW5kIGZvcm1EZXN0b3J5ZWQoKS4KKyAgICAgICAgIFRoaXMgaGVscHMgdXMgdG8g
Y2FsbCByZWdpc3RlckZvcm1FbGVtZW50KCkgYW5kIHJlbW92ZUZyb21FbGVtZW50KCkKKyAgICAg
ICAgIGNvcnJlY3RseSwgYW5kIGNhbGwgd2lsbENoYW5nZUZvcm0oKS9kaWRDaGFuZ2VGb3JtKCkg
aG9va3MgY29ycmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbENoYW5nZUZvcm0pOgorICAgICAgICBUaGlzIHZp
cnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB0aGUgb3duZXIgZm9ybSBpcyB1ZHBhdGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRDaGFuZ2VGb3Jt
KToKKyAgICAgICAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgb3du
ZXIgZm9ybSB3YXMgdWRwYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6cmVzZXRGb3JtT3duZXIpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCk6IGRpdHRvLgorICAg
ICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICByZW1vdmVGb3JtRWxlbWVudCgpIGlzIG5vdCBuZWVkZWQuIH5Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQoKSB0cmVhdHMgaXQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIE5vIG5lZWQgdG8g
aGFuZGxlIENoZWNrZWRSYWRpb0J1dHRvbnMgaGVyZS4gSXQgaXMgaGFuZGxlZCBieSBIVE1MSW5w
dXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvVHJlZSk6IGRpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVu
dCk6CisgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHJhZGlvIGJ1dHRvbiBncm91cHMg
aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1l
bnQpOiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAg
ICBCZWNhdXNlIHJlbW92ZWRGcm9tRG9jdW1lbnQoKSB1bnJlZ2lzdGVycyB0aGUgcmFkaW8gYnV0
dG9uIGZyb20gYSBncm91cCwKKyAgICAgICAgd2UgbmVlZCB0byBkbyBub3RoaW5nIGhlcmUuIEV2
ZW4gaWYgdGhlIHJhZGlvIGJ1dHRvbiBpcyBkZXN0cnVjdGVkIHdpdGgKKyAgICAgICAgdGhlIG93
bmVyIERvY3VtZW50LCB3ZSBkb24ndCBuZWVkIHRvIGNsZWFuIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0
ZUNoZWNrZWRSYWRpb0J1dHRvbnMpOgorICAgICAgICBDaGVja2luZyBhdHRhY2hlZCgpIHdhcyB3
cm9uZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OndpbGxDaGFuZ2VGb3Jt
KToKKyAgICAgICAgUmVtb3ZlIHRoaXMgcmFkaW8gYnV0dG9uIGZyb20gYSByYWRpbyBidXR0b24g
Z3JvdXAgZm9yIHRoZSBvbGQgZm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmRpZENoYW5nZUZvcm0pOgorICAgICAgICBBZGQgdGhpcyByYWRpbyBidXR0b24gdG8gYSBy
YWRpbyBidXR0b24gZ3JvdXAgZm9yIHRoZSBuZXcgZm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgQWRkIENoZWNr
ZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbigpIGNhbGwuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAgQWRkIENoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbigpIGNhbGwuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6CisgICAgICAgIFdlIGRv
bid0IG5lZWQgdG8gaGFuZGxlIENoZWNrZWRSYWRpb0J1dHRvbigpIGhlcmUgYmVjYXVzZQorICAg
ICAgICByZW1vdmVkRnJvbURvY3VtZW50KCkgaGFuZGxlcyBpdC4KKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudCk6
IFVzZSBzZXRGb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6fkhU
TUxPYmplY3RFbGVtZW50KToKKyAgICAgICAgcmVtb3ZlRm9ybUVsZW1lbnQoKSBpcyBub3QgbmVl
ZGVkLiB+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgdHJlYXRzIGl0LgorCiAyMDExLTEyLTIyICBM
ZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gdGhlIEJsYWNrQmVycnkgY2hhbmdlIHRvIFJlc291cmNlSGFuZGxlLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCAzOGU1ZWZi
YmM5MWM2MGNjYjQ1YTU0NjZlNWZiNGIyOWMwNzQxYWUwLi40ZTc4ODRjMzE2Y2M4NjIxMGU5Yzg4
NzNlYzI4N2I2Y2UwZWFkOWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1
dHRvbnMuY3BwCkBAIC0yNSwzNCArMjUsMzIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBlbGVtZW50KQorc3RhdGljIGlubGluZSBib29sIHNob3VsZE1ha2VSYWRpb0dyb3VwKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCByYWRp
byBidXR0b25zLgotICAgIGlmICghZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQotICAgICAgICBy
ZXR1cm47CisgICAgcmV0dXJuIGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSAmJiAhZWxlbWVudC0+
bmFtZSgpLmlzRW1wdHkoKSAmJiBlbGVtZW50LT5pbkRvY3VtZW50KCk7Cit9CiAKLSAgICAvLyBX
aXRob3V0IGEgbmFtZSwgdGhlcmUgaXMgbm8gZ3JvdXAuCi0gICAgaWYgKGVsZW1lbnQtPm5hbWUo
KS5pc0VtcHR5KCkpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghc2hvdWxkTWFrZVJhZGlvR3JvdXAoZWxl
bWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKLQogICAgIC8v
IFdlIG9ubHkgdHJhY2sgY2hlY2tlZCBidXR0b25zLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5j
aGVja2VkKCkpCisgICAgaWYgKCFlbGVtZW50LT5jaGVja2VkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIG1fbmFt
ZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0lucHV0TWFwKTsK
IAotICAgIHBhaXI8TmFtZVRvSW5wdXRNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX25h
bWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIGlu
cHV0RWxlbWVudCk7CisgICAgcGFpcjxOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgp
LmltcGwoKSwgZWxlbWVudCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBIVE1MSW5wdXRFbGVtZW50KiBvbGRDaGVja2VkQnV0dG9uID0gcmVzdWx0
LmZpcnN0LT5zZWNvbmQ7Ci0gICAgaWYgKG9sZENoZWNrZWRCdXR0b24gPT0gaW5wdXRFbGVtZW50
KQorICAgIGlmIChvbGRDaGVja2VkQnV0dG9uID09IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gaW5wdXRFbGVtZW50OworICAgIHJlc3VsdC5m
aXJzdC0+c2Vjb25kID0gZWxlbWVudDsKICAgICBvbGRDaGVja2VkQnV0dG9uLT5zZXRDaGVja2Vk
KGZhbHNlKTsKIH0KIApAQCAtNjYsOSArNjQsMTEgQEAgSFRNTElucHV0RWxlbWVudCogQ2hlY2tl
ZFJhZGlvQnV0dG9uczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYK
ICAgICByZXR1cm4gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmdldChuYW1lLmltcGwo
KSk7CiB9CiAKLXZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92
ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChlbGVtZW50LT5u
YW1lKCkuaXNFbXB0eSgpIHx8ICFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKKyAgICBp
ZiAoIXNob3VsZE1ha2VSYWRpb0dyb3VwKGVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5jaGVja0NvbnNpc3RlbmN5KCk7
CkBAIC03Nyw5ICs3Nyw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9u
KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fbmFtZVRv
Q2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9IGVsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoaW5wdXRFbGVt
ZW50LCBpbnB1dEVsZW1lbnQpOwotICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVh
ckNoZWNrZWQoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSk7
CiAgICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7CiAKICAgICBtX25hbWVUb0No
ZWNrZWRSYWRpb0J1dHRvbk1hcC0+cmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5oCmluZGV4IDBmYTQ1N2FjYjQ2MmQ3ZWJlMWFjYzVhN2U5YTlmMDNjZjM4
ZTllODEuLjkyNWI1MDY3ODJhNDFjMjdkMTU0N2VmMDE5OWFkOTVmNWJkYTMyMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaApAQCAtMjcsMTMgKzI3LDEyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudDsKIGNs
YXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIENoZWNrZWRSYWRpb0J1dHRvbnMgewogcHVi
bGljOgotICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB2
b2lkIHJlbW92ZUJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdm9pZCBhZGRC
dXR0b24oSFRNTElucHV0RWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1
dEVsZW1lbnQqKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9yR3JvdXAo
Y29uc3QgQXRvbWljU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDFkZGI2YTY1
YzI2NjJmMDk4YTgzMDM5MWZjYmUxMTQwMWFiMjE2NjMuLjBiMjgwNjljNmMwZTNlMGE3YThjNTdj
YjZiY2U5MzAzN2UxZTdmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFz
c29jaWF0ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAKQEAgLTM1LDEzICszNSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9y
bUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IG1fZm9ybShm
b3JtKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKQorICAg
IDogbV9mb3JtKDApCiB7CiB9CiAKIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lh
dGVkRWxlbWVudCgpCiB7CisgICAgc2V0Rm9ybSgwKTsKIH0KIAogVmFsaWRpdHlTdGF0ZSogRm9y
bUFzc29jaWF0ZWRFbGVtZW50Ojp2YWxpZGl0eSgpCkBAIC04MCwxNSArODEsMTIgQEAgdm9pZCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogICAgICAgICAvLyBSZXNl
dHMgdGhlIGZvcm0gb3duZXIgYXQgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSBlbGVtZW50IGRvbid0
CiAgICAgICAgIC8vIGFzc29jaWF0ZSBhbnkgZm9ybSBlbGVtZW50cyB3aGVuIHRoZXJlIGlzIG5v
IGVsZW1lbnQgd2hpY2ggaGFzCiAgICAgICAgIC8vIHRoZSBnaXZlbiBJRC4KLSAgICAgICAgaWYg
KG1fZm9ybSkgewotICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsK
LSAgICAgICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgSFRNTEZvcm1FbGVt
ZW50KiBuZXdGb3JtID0gMDsKICAgICAgICAgRWxlbWVudCogZm9ybUVsZW1lbnQgPSBlbGVtZW50
LT50cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShm
b3JtQXR0cikpOwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQtPmhhc1Rh
Z05hbWUoZm9ybVRhZykpIHsKLSAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJG
b3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG5ld0Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICAgIH0KKyAgICAgICAgc2V0Rm9ybShu
ZXdGb3JtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fZm9ybSkgewpAQCAt
OTYsOSArOTQsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZSgpCiAgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJ
biB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCiAgICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3
aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAgICAgIC8v
IGFuZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBl
bGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAg
ICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIHNldEZvcm0o
ZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKICAgICB9CiB9CiAKQEAgLTExNywxNSArMTEz
LDM3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKQogICAg
IC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHBy
ZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgogICAgIC8vIE90aGVyd2lzZSwgbnVs
bCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qg
b2YgZWxlbWVudHMuCiAgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50KSAhPSBmaW5k
Um9vdChtX2Zvcm0pKQotICAgICAgICByZW1vdmVGcm9tRm9ybSgpOworICAgICAgICBzZXRGb3Jt
KDApOworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Rm9ybShIVE1MRm9ybUVs
ZW1lbnQqIG5ld0Zvcm0pCit7CisgICAgaWYgKG1fZm9ybSA9PSBuZXdGb3JtKQorICAgICAgICBy
ZXR1cm47CisgICAgd2lsbENoYW5nZUZvcm0oKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBt
X2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgIG1fZm9ybSA9IG5ld0Zvcm07Cisg
ICAgaWYgKG1fZm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMp
OworICAgIGRpZENoYW5nZUZvcm0oKTsKIH0KIAotdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OnJlbW92ZUZyb21Gb3JtKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtRGVzdHJv
eWVkKCkKIHsKICAgICBpZiAoIW1fZm9ybSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgd2lsbENoYW5nZUZvcm0oKTsKICAgICBtX2Zv
cm0gPSAwOworICAgIGRpZENoYW5nZUZvcm0oKTsKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OndpbGxDaGFuZ2VGb3JtKCkKK3sKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OmRpZENoYW5nZUZvcm0oKQorewogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
cmVzZXRGb3JtT3duZXIoKQpAQCAtMTM1LDkgKzE1Myw4IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpyZXNldEZvcm1Pd25lcigpCiAgICAgaWYgKG1fZm9ybSkgewogICAgICAgICBpZiAo
Zm9ybUlkLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Zvcm0tPnJl
bW92ZUZvcm1FbGVtZW50KHRoaXMpOwogICAgIH0KLSAgICBtX2Zvcm0gPSAwOworICAgIEhUTUxG
b3JtRWxlbWVudCogbmV3Rm9ybSA9IDA7CiAgICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkgJiYgZWxl
bWVudC0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhh
dCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBm
aXJzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8K
QEAgLTE0NSwxMSArMTYyLDEwIEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZv
cm1Pd25lcigpCiAgICAgICAgIC8vIHRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIg
dGhlIGdpdmVuIGVsZW1lbnQuCiAgICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGVsZW1l
bnQtPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwogICAgICAgICBpZiAoZmly
c3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAg
ICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7
CisgICAgICAgICAgICBuZXdGb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmly
c3RFbGVtZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9mb3JtID0gZWxlbWVudC0+ZmluZEZv
cm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJG
b3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgbmV3Rm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5j
ZXN0b3IoKTsKKyAgICBzZXRGb3JtKG5ld0Zvcm0pOwogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQpAQCAtMTU3LDExICsxNzMsNyBAQCB2b2lk
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQogICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWVsZW1lbnQt
PmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJp
YnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAg
aWYgKG1fZm9ybSkKLSAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7
Ci0gICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAg
aWYgKG1fZm9ybSkKLSAgICAgICAgICAgIGZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlz
KTsKKyAgICAgICAgc2V0Rm9ybShlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCkpOwogICAgICAg
ICBlbGVtZW50LT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJp
YnV0ZSh0aGlzKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzZXRGb3JtT3duZXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCmluZGV4IDVhODYxZTI3MjYx
YjY3NTM4ZjAwYjBmMjBhMjIyZjg2NTRjNDM1NDIuLjhlYmEyYjFkNDliMmQzZWQ3Y2Q1NWIyNjdk
MDNmMWJjOTM2MmU0N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVs
ZW1lbnQuaApAQCAtNTMsMTIgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdHJ1ZSBm
b3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNlZSBIVE1MNC0xNy4xMy4yKS4KICAgICB2aXJ0dWFs
IGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9Cisg
ICAgdm9pZCBmb3JtRGVzdHJveWVkKCk7CiAKICAgICB2b2lkIHJlc2V0Rm9ybU93bmVyKCk7CiAK
IHByb3RlY3RlZDoKLSAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50Kik7
CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KCk7CiAKICAgICB2b2lkIGluc2VydGVkSW50b1Ry
ZWUoKTsKICAgICB2b2lkIHJlbW92ZWRGcm9tVHJlZSgpOwpAQCAtNjYsMTAgKzY2LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2b2lkIHdpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAKLSAgICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVt
ZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KLSAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7
CisgICAgdm9pZCBzZXRGb3JtKEhUTUxGb3JtRWxlbWVudCopOwogICAgIHZvaWQgZm9ybUF0dHJp
YnV0ZUNoYW5nZWQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlRm9ybSgpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VGb3JtKCk7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0ID0gMDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggYzA1ZWE0
MTAxMmMzMGY1NWU5NDIxZWRjYmEwYWIyYzZjNDA4YTI3Yi4uM2VkYzdjYzc2YWQyNmQ5M2NjZWNm
ZDYxYjY1MDZkM2JiMzA2MWE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1l
bnQqIGZvcm0pCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudChmb3JtKQorICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkK
ICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQogICAgICwg
bV9yZXF1aXJlZChmYWxzZSkKQEAgLTYxLDE4ICs2MSwxMiBAQCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvYwogICAgICwgbV93YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChm
YWxzZSkKICAgICAsIG1faGFzQXV0b2ZvY3VzZWQoZmFsc2UpCiB7Ci0gICAgaWYgKCF0aGlzLT5m
b3JtKCkpCi0gICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKLSAgICBpZiAodGhp
cy0+Zm9ybSgpKQotICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7Ci0KKyAgICBzZXRGb3JtKGZvcm0gPyBmb3JtIDogZmluZEZvcm1BbmNlc3RvcigpKTsKICAg
ICBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpOwogfQogCiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCiB7Ci0gICAgaWYgKGZvcm0oKSkK
LSAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAogdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQpAQCAtMTEwLDggKzEwNCw2IEBAIHZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpIHsKICAgICAgICAgZm9ybUF0
dHJpYnV0ZUNoYW5nZWQoKTsKLSAgICAgICAgaWYgKCFmb3JtKCkpCi0gICAgICAgICAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewogICAgICAgICBib29sIG9sZERp
c2FibGVkID0gbV9kaXNhYmxlZDsKICAgICAgICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwo
KTsKQEAgLTIwNSw5ICsxOTcsNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCiB7CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpp
bnNlcnRlZEludG9UcmVlKCk7Ci0gICAgaWYgKCFmb3JtKCkpCi0gICAgICAgIGRvY3VtZW50KCkt
PmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0KICAgICBIVE1MRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCmluZGV4IDVhOGVjYTM4OTYzNjQ0NTRhZTMzMjYxNTkyODU3OTY4M2M5YjVh
NTMuLmI5NWNmYWQ4MmFhYTNiNDZkNzEyODgxZWExNDY5NjM4MGRmNGNiYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTQ3MCwxOCArNDcwLDExIEBAIHVuc2ln
bmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGFzc29jaWF0ZWRFbGVtCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1F
bGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBpZiAoZS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpOwotICAgICAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKGVsZW1lbnQpOwotICAg
ICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGVsZW1lbnQpOwotICAgIH0KICAg
ICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVsZW1lbnRJbmRleChlKSwgZSk7CiB9
CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudChGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAg
ICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KGUpKTsKICAgICB1bnNpZ25lZCBpbmRleDsKICAgICBmb3IgKGlu
ZGV4ID0gMDsgaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpIHsK
ICAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2luZGV4XSA9PSBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggMjE0ZTVjNGVlOWVkNjc4YTgwNWE3
OTAwYTViMDQzYjYzODkxOWI3MS4uOThhZDdkN2ZmZTQ5NjBiMjIwMjlkNmFkZTEyMTA5MjAzOGIz
OWRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMTUs
MTIgKzExNSw2IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKIHsKICAg
ICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5y
ZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0KLSAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwotCi0gICAg
Ly8gTmVlZCB0byByZW1vdmUgdGhpcyBmcm9tIHRoZSBmb3JtIHdoaWxlIGl0IGlzIHN0aWxsIGFu
IEhUTUxJbnB1dEVsZW1lbnQsCi0gICAgLy8gc28gY2FuJ3Qgd2FpdCBmb3IgdGhlIGJhc2UgY2xh
c3MncyBkZXN0cnVjdG9yIHRvIGRvIGl0LgotICAgIHJlbW92ZUZyb21Gb3JtKCk7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29u
c3QKQEAgLTE3OSw4ICsxNzMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZEF1dG9j
b21wbGV0ZSgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlQ2hlY2tlZFJh
ZGlvQnV0dG9ucygpCiB7Ci0gICAgaWYgKGF0dGFjaGVkKCkgJiYgY2hlY2tlZCgpKQotICAgICAg
ICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworICAgIGNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBpZiAoZm9ybSgpKSB7CiAgICAgICAg
IGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCkt
PmFzc29jaWF0ZWRFbGVtZW50cygpOwpAQCAtMTUwMiw2ICsxNDk1LDI4IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkKICAgICByZXNldCgp
OwogfQogCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxDaGFuZ2VGb3JtKCkKK3sKKyAgICBj
aGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOworfQorCit2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OmRpZENoYW5nZUZvcm0oKQoreworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMo
KS5hZGRCdXR0b24odGhpcyk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKQoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpOworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhp
cyk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCit7
CisgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOworfQorCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKICAgICBt
X2lucHV0VHlwZS0+d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKQEAgLTE1MTAsOCArMTUy
NSw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KQogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQogICAgICAgICBkb2N1bWVudCgp
LT51bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKIAotICAg
IGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7Ci0K
ICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1l
bnQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCA3ODY3
YTMyZWMzYmY3NmYyMTA0ZDVlOWVkMjY4NTUwNmY1NzdlODFiLi5hYmI1M2Q4NzJlYjRkZTc5OTdi
YzM5ZWE4NjY3ZDcwMDA3ZGUxOGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaApAQCAtMjQ5LDYgKzI0OSwxMCBAQCBwcml2YXRlOgogICAgIGVudW0gQXV0b0NvbXBsZXRl
U2V0dGluZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKICAgICBlbnVtIEFueVN0ZXBIYW5k
bGluZyB7IFJlamVjdEFueSwgQW55SXNEZWZhdWx0U3RlcCB9OwogCisgICAgdmlydHVhbCB2b2lk
IHdpbGxDaGFuZ2VGb3JtKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUZv
cm0oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKaW5kZXggYTllMWYwNGIxNjZkMGVjOTE3YThhNjQ3
NjE2OTVkZjMwZDg1ODU0Yy4uZjVkNjg0ZTcwMzBlNGJjODM2ZDNhMDkyNDgzOWM0MjA1MGY3ODU0
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTU1LDIx
ICs1NSwxNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBpbmxpbmUgSFRNTE9iamVj
dEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikgCiAgICAgOiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
LCBjcmVhdGVkQnlQYXJzZXIsIFNob3VsZE5vdFByZWZlclBsdWdJbnNGb3JJbWFnZXMpCi0gICAg
LCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoZm9ybSkKKyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCgpCiAgICAgLCBtX2RvY05hbWVkSXRlbSh0cnVlKQogICAgICwgbV91c2VGYWxsYmFja0NvbnRl
bnQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0VGFnKSk7Ci0gICAgaWYg
KCF0aGlzLT5mb3JtKCkpCi0gICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKLSAg
ICBpZiAodGhpcy0+Zm9ybSgpKQotICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVs
ZW1lbnQodGhpcyk7CisgICAgc2V0Rm9ybShmb3JtID8gZm9ybSA6IGZpbmRGb3JtQW5jZXN0b3Io
KSk7CiB9CiAKIGlubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KCkK
IHsKLSAgICBpZiAoZm9ybSgpKQotICAgICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRo
aXMpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAw
YmFmN2I0ODUwNzhhMjdiZGU1NjcxYWU4NjZjYThhYTE3MTUyM2UxLi44ZmEzY2Q3NTAwMDA0MzRh
ZDcxYzRiYjRhNjkxZWUyOTk4NDM3YTM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTIt
MjUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEEgcmFkaW8g
YnV0dG9uIG5vdCBpbiBhIERvY3VtZW50IHNob3VsZCBub3Qgam9pbiBhIHJhZGlvIGJ1dHRvbiBn
cm91cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3
MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZh
c3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLmh0bWw6IEFkZGVkLgorCiAyMDExLTEyLTIy
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIE5v
dCByZXZpZXdlZC4gQWRkIGZpbmFsIHNldCBvZiBTVkcgcGl4ZWwgdGVzdCByZXN1bHRzIGZvciBT
bm93IExlb3BhcmQuIE5vdyBib3RoIExpb24gJiBTTCBwYXNzIG1vc3QgdGVzdHMgd2l0aCAtLXRv
bGVyYW5jZSAwIGluIHN2Zy8uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Jh
ZGlvL3JhZGlvLWdyb3VwLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFk
aW8vcmFkaW8tZ3JvdXAtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmMjhiN2IyODdhZTM1ZjM0
MjA0NWZiNDFiOTQ1M2ZkN2FiMTVmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ3IEBA
CitWYXJpb3VzIHRlc3RzIGFib3V0IHJhZGlvIGJ1dHRvbiBncm91cC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK01vdmluZyBhIGNoZWNrZWQgcmFkaW8gYnV0dG9uIHRvIGFub3Ro
ZXIgZm9ybToKK1BBU1MgJCgib3V0c2lkZSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJpbnNp
ZGUiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgiaW5zaWRlMiIpLmNoZWNrZWQgaXMgdHJ1ZQor
UEFTUyAkKCJvdXRzaWRlIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoImluc2lkZSIpLmNoZWNr
ZWQgaXMgZmFsc2UKK1BBU1MgJCgiaW5zaWRlMiIpLmNoZWNrZWQgaXMgdHJ1ZQorV2hlbiBhIHJh
ZGlvIGluIGEgZm9ybSBpcyByZW1vdmVkLCBpdCBzaG91bGQgbm90IGFmZmVjdCBEb2N1bWVudC1s
ZXZlbCBncm91cHM6CitQQVNTICQoIm91dHNpZGUiKS5jaGVja2VkIGlzIHRydWUKKworUmVtb3Zp
bmcgYW4gYW5jZXN0b3Igb3duZXIgZm9ybToKK1BBU1MgJCgicmFkaW8wLTEiKS5jaGVja2VkIGlz
IHRydWUKKworQ2hhbmdpbmcgZm9ybSBhdHRyaWJ1dGUKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVj
a2VkIGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTIiKS5jaGVja2VkIGlzIGZhbHNlCitQQVNTICQo
InJhZGlvMS0zIikuY2hlY2tlZCBpcyB0cnVlCitSZW1vdmluZyBhIG5vbi1hbmNlc3RvciBvd25l
ciBmb3JtOgorUEFTUyAkKCJyYWRpbzEtMyIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJyYWRp
bzEtNCIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJyYWRpbzEtMSIpLmNoZWNrZWQgaXMgZmFs
c2UKK1BBU1MgJCgicmFkaW8xLTMiKS5jaGVja2VkIGlzIHRydWUKKworQWRkaW5nIGEgcmFkaW8g
YnV0dG9uIHRvIGFuIG9ycGhhbiB0cmVlOgorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImlucHV0IilbMF0uY2hlY2tlZCBpcyB0cnVlCitQQVNTIG9ycGhhbkRpdi5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkIGlzIHRydWUKK0FkZGluZyB0aGUgb3Jw
aGFuIHRyZWUgdG8gYSBkb2N1bWVudDoKK1BBU1Mgb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJpbnB1dCIpWzBdLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1Mgb3JwaGFuRGl2LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJpbnB1dCIpWzFdLmNoZWNrZWQgaXMgdHJ1ZQorUGFyc2luZyBhbiBvcnBo
YW4gZm9ybToKK1BBU1Mgb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBd
LmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlu
cHV0IilbMV0uY2hlY2tlZCBpcyB0cnVlCisKK01vdmluZyBhIHJhZGlvIGJ1dHRvbiB0byBhbm90
aGVyIERvY3VtZW50OgorUEFTUyBkb2MuZ2V0RWxlbWVudEJ5SWQoInJhZGlvNC0yIikuY2hlY2tl
ZCBpcyBmYWxzZQorUEFTUyBkb2MuZ2V0RWxlbWVudEJ5SWQoInJhZGlvNC0xIikuY2hlY2tlZCBp
cyB0cnVlCitQQVNTIGRvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVja2VkIGlzIHRy
dWUKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mN2NiYWFkMTliZTlhM2Y0ZmVmNWU1NTg0NWZmMmYyYjI3MjRjY2I0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91cC5odG1sCkBA
IC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9InBh
cmVudCI+Cis8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlkPSJvdXRz
aWRlIj4KKzxmb3JtIGlkPSJmb3JtMSI+Cis8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im5hbWUx
IiBjaGVja2VkIGlkPSJpbnNpZGUiPgorPC9mb3JtPgorPGZvcm0gaWQ9ImZvcm0yIj4KKzxpbnB1
dCB0eXBlPSJyYWRpbyIgbmFtZT0ibmFtZTEiIGNoZWNrZWQgaWQ9Imluc2lkZTIiPgorPC9mb3Jt
PgorPC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVmFyaW91cyB0ZXN0cyBhYm91dCBy
YWRpbyBidXR0b24gZ3JvdXAuJyk7CisKK2NvbnN0IENoZWNrZWQgPSB0cnVlOworY29uc3QgVW5j
aGVja2VkID0gZmFsc2U7CisKK2Z1bmN0aW9uIGNyZWF0ZVJhZGlvKG5hbWUsIGNoZWNrZWQsIGlk
KSB7CisgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAg
ICBpbnB1dC50eXBlID0gJ3JhZGlvJzsKKyAgICBpbnB1dC5uYW1lID0gbmFtZTsKKyAgICBpbnB1
dC5jaGVja2VkID0gISFjaGVja2VkOworICAgIGlucHV0LmlkID0gaWQ7CisgICAgcmV0dXJuIGlu
cHV0OworfQorCitmdW5jdGlvbiAkKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTsKK30KKwordmFyIHBhcmVudCA9ICQoJ3BhcmVudCcpOworZGVidWcoJ01vdmlu
ZyBhIGNoZWNrZWQgcmFkaW8gYnV0dG9uIHRvIGFub3RoZXIgZm9ybTonKTsKK3Nob3VsZEJlVHJ1
ZSgnJCgib3V0c2lkZSIpLmNoZWNrZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgiaW5zaWRlIikuY2hl
Y2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcpOworJCgnZm9ybTEn
KS5hcHBlbmRDaGlsZCgkKCdpbnNpZGUyJykpOworc2hvdWxkQmVUcnVlKCckKCJvdXRzaWRlIiku
Y2hlY2tlZCcpOworc2hvdWxkQmVGYWxzZSgnJCgiaW5zaWRlIikuY2hlY2tlZCcpOworc2hvdWxk
QmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcpOworZGVidWcoJ1doZW4gYSByYWRpbyBpbiBh
IGZvcm0gaXMgcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBhZmZlY3QgRG9jdW1lbnQtbGV2ZWwgZ3Jv
dXBzOicpOworcGFyZW50LnJlbW92ZUNoaWxkKCQoJ2Zvcm0xJykpOworc2hvdWxkQmVUcnVlKCck
KCJvdXRzaWRlIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1ZygnUmVtb3ZpbmcgYW4g
YW5jZXN0b3Igb3duZXIgZm9ybTonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9
cmFkaW8gbmFtZT1uYW1lMCBjaGVja2VkIGlkPXJhZGlvMC0xPicgKworICAgICc8Zm9ybSBpZD1m
b3JtMT48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUwIGNoZWNrZWQgaWQ9cmFkaW8wLTI+PC9m
b3JtPic7CitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEnKSk7CitnYygpOworc2hvdWxkQmVU
cnVlKCckKCJyYWRpbzAtMSIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOworZGVidWcoJ0NoYW5n
aW5nIGZvcm0gYXR0cmlidXRlJyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPXJh
ZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1yYWRpbzEtMT4nICsKKyAgICAnPGZvcm0gaWQ9Zm9y
bTE+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVja2VkIGlkPXJhZGlvMS0yPjwvZm9y
bT4nICsKKyAgICAnPGZvcm0gaWQ9Zm9ybTI+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBj
aGVja2VkIGlkPXJhZGlvMS0zPjwvZm9ybT4nOworJCgncmFkaW8xLTMnKS5zZXRBdHRyaWJ1dGUo
J2Zvcm0nLCAnZm9ybTEnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTEiKS5jaGVja2VkJyk7
CitzaG91bGRCZUZhbHNlKCckKCJyYWRpbzEtMiIpLmNoZWNrZWQnKTsKK3Nob3VsZEJlVHJ1ZSgn
JCgicmFkaW8xLTMiKS5jaGVja2VkJyk7CisKK2RlYnVnKCdSZW1vdmluZyBhIG5vbi1hbmNlc3Rv
ciBvd25lciBmb3JtOicpOworJCgnZm9ybTInKS5hcHBlbmRDaGlsZChjcmVhdGVSYWRpbygnbmFt
ZTEnLCBDaGVja2VkLCAncmFkaW8xLTQnKSk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS0zIiku
Y2hlY2tlZCcpOworLy8gSWYgdGhlcmUgaXMgbm8gZWxlbWVudHMgd2l0aCBJRCBzcGVjaWZpZWQg
YnkgZm9ybT0gYXR0cmlidXRlLCB0aGUgZm9ybQorLy8gY29udHJvbCBpcyBub3QgYXNzb2NpYXRl
ZCB0byBhbnkgZm9ybXMuCitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEnKSk7CisvLyBGSVhN
RTogV2UgbmVlZCB0byBjYWxsIGdjKCkgdHdpY2Ugb24gQXBwbGUgTWFjLgorZ2MoKTsKK2djKCk7
CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS00IikuY2hlY2tlZCcpOworLy8gVGhlIGZvbGxvd2lu
ZyB0ZXN0IGRlcGVuZHMgb24gZ2MoKS4gSXQgbWlnaHQgZmFpbCBvbiBhIHJlYWwgYnJvd3Nlci4K
K3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCck
KCJyYWRpbzEtMyIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOworZGVidWcoJ0FkZGluZyBhIHJh
ZGlvIGJ1dHRvbiB0byBhbiBvcnBoYW4gdHJlZTonKTsKK3ZhciBvcnBoYW5EaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK29ycGhhbkRpdi5hcHBlbmRDaGlsZChjcmVhdGVSYWRp
bygnbmFtZTInLCBDaGVja2VkLCAnJykpOworb3JwaGFuRGl2LmFwcGVuZENoaWxkKGNyZWF0ZVJh
ZGlvKCduYW1lMicsIENoZWNrZWQsICcnKSk7CitzaG91bGRCZVRydWUoJ29ycGhhbkRpdi5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJ29y
cGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkJyk7CitkZWJ1
ZygnQWRkaW5nIHRoZSBvcnBoYW4gdHJlZSB0byBhIGRvY3VtZW50OicpOworZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChvcnBoYW5EaXYpOworc2hvdWxkQmVGYWxzZSgnb3JwaGFuRGl2LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLmNoZWNrZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnb3Jw
aGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzFdLmNoZWNrZWQnKTsKKworZGVi
dWcoJ1BhcnNpbmcgYW4gb3JwaGFuIGZvcm06Jyk7Citkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxk
KG9ycGhhbkRpdik7CitvcnBoYW5EaXYuaW5uZXJIVE1MID0gJzxmb3JtPjxpbnB1dCB0eXBlPXJh
ZGlvIG5hbWU9bmFtZTMgY2hlY2tlZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUzIGNoZWNr
ZWQ+PC9mb3JtPic7CitzaG91bGRCZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiaW5wdXQiKVswXS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVn
KCdNb3ZpbmcgYSByYWRpbyBidXR0b24gdG8gYW5vdGhlciBEb2N1bWVudDonKTsKK3BhcmVudC5p
bm5lckhUTUwgPSAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lNCBjaGVja2VkIGlkPXJhZGlv
NC0xPic7Cit2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3Vt
ZW50KCk7Citkb2MuYm9keS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1l
NCBjaGVja2VkIGlkPXJhZGlvNC0yPic7Citkb2MuYm9keS5hcHBlbmRDaGlsZChkb2MuYWRvcHRO
b2RlKCQoJ3JhZGlvNC0xJykpKTsKK3Nob3VsZEJlRmFsc2UoJ2RvYy5nZXRFbGVtZW50QnlJZCgi
cmFkaW80LTIiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJ2RvYy5nZXRFbGVtZW50QnlJZCgi
cmFkaW80LTEiKS5jaGVja2VkJyk7CitwYXJlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlUmFkaW8oJ25h
bWU0JywgQ2hlY2tlZCwgJycpKTsKK3Nob3VsZEJlVHJ1ZSgnZG9jLmdldEVsZW1lbnRCeUlkKCJy
YWRpbzQtMSIpLmNoZWNrZWQnKTsKKworcGFyZW50LmlubmVySFRNTCA9ICcnOworZGVidWcoJycp
OworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120535</attachid>
            <date>2011-12-26 00:25:04 -0800</date>
            <delta_ts>2012-01-05 00:18:41 -0800</delta_ts>
            <desc>Patch by tkent</desc>
            <filename>bug-45719-20111226172502.patch</filename>
            <type>text/plain</type>
            <size>28593</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmU3OTE4YjQxZTkwY2Qx
ZmM5Y2E3NGRhYTM0NDUyYWQwZWRmMzNhZC4uYTAxNzY5YTUyNTEzMmVlODc2ZmIxOTAxZjA5MTcz
YTRmNTc1ZThlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDExLTEyLTI1ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBkb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgcGVyIHRoZSBz
dGFuZGFyZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvcnMsIHdlIHNob3VsZCBub3QgYWRkIGEK
KyAgICAgICAgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGRvY3VtZW50IHRvIGEgcmFkaW8gYnV0dG9u
IGdyb3VwLgorCisgICAgICAgIFNvLCBDaGVja2VkUmFkaW9CdXR0b24gbWVtYmVyIGZ1bmN0aW9u
cyBzaG91bGQgYmUgY2FsbGVkIGluCisgICAgICAgIGluc2VydGVkSW50b0RvY3VtZW50KCkgYW5k
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKSwgYW5kIHRoZXkgc2hvdWxkIGRvCisgICAgICAgIG5vdGhp
bmcgaWYgdGhlIHNwZWNpZmllZCByYWRpbyBidXR0b24gaXMgbm90IGluIGEgZG9jdW1lbnQuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBhIGJ1ZyB0aGF0IGZvcm0gb3duZXIgY2hh
bmdlIGJ5ICdmb3JtJyBhdHRyaWJ1dGUKKyAgICAgICAgZGlkbid0IHVwZGF0ZSByYWRpbyBidXR0
b24gZ3JvdXBzIGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3JhZGlvL3Jh
ZGlvLWdyb3VwLmh0bWwKKworICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNob3VsZE1ha2VSYWRpb0dyb3VwKTogQSBoZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgPGlucHV0PiBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRp
b0J1dHRvbnM6OmFkZEJ1dHRvbik6CisgICAgICAgIC0gQ2hhbmdlIHRoZSBhcmd1bWVudCB0eXBl
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAg
LSBVc2Ugc2hvdWxkTWFrZVJhZGlvR3JvdXAoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6IGRpdHRvLgorICAgICAgICAqIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmg6CisgICAgICAgICBDaGFuZ2UgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIGFk
ZEJ1dHRvbigpIGFuZCByZW1vdmVCdXR0b24oKToKKyAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIC0+IEhUTUxJbnB1dEVsZW1lbnQqLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgIERvIG5vdCB1cGRhdGUgbV9mb3JtIGV4Y2VwdCBpbiBz
ZXRGb3JtKCkgYW5kIGZvcm1EZXN0b3J5ZWQoKS4KKyAgICAgICAgIFRoaXMgaGVscHMgdXMgdG8g
Y2FsbCByZWdpc3RlckZvcm1FbGVtZW50KCkgYW5kIHJlbW92ZUZyb21FbGVtZW50KCkKKyAgICAg
ICAgIGNvcnJlY3RseSwgYW5kIGNhbGwgd2lsbENoYW5nZUZvcm0oKS9kaWRDaGFuZ2VGb3JtKCkg
aG9va3MgY29ycmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbENoYW5nZUZvcm0pOgorICAgICAgICBUaGlzIHZp
cnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB0aGUgb3duZXIgZm9ybSBpcyB1ZHBhdGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRDaGFuZ2VGb3Jt
KToKKyAgICAgICAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgb3du
ZXIgZm9ybSB3YXMgdWRwYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6cmVzZXRGb3JtT3duZXIpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCk6IGRpdHRvLgorICAg
ICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICByZW1vdmVGb3JtRWxlbWVudCgpIGlzIG5vdCBuZWVkZWQuIH5Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQoKSB0cmVhdHMgaXQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIE5vIG5lZWQgdG8g
aGFuZGxlIENoZWNrZWRSYWRpb0J1dHRvbnMgaGVyZS4gSXQgaXMgaGFuZGxlZCBieSBIVE1MSW5w
dXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvVHJlZSk6IGRpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVu
dCk6CisgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHJhZGlvIGJ1dHRvbiBncm91cHMg
aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1l
bnQpOiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAg
ICBCZWNhdXNlIHJlbW92ZWRGcm9tRG9jdW1lbnQoKSB1bnJlZ2lzdGVycyB0aGUgcmFkaW8gYnV0
dG9uIGZyb20gYSBncm91cCwKKyAgICAgICAgd2UgbmVlZCB0byBkbyBub3RoaW5nIGhlcmUuIEV2
ZW4gaWYgdGhlIHJhZGlvIGJ1dHRvbiBpcyBkZXN0cnVjdGVkIHdpdGgKKyAgICAgICAgdGhlIG93
bmVyIERvY3VtZW50LCB3ZSBkb24ndCBuZWVkIHRvIGNsZWFuIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0
ZUNoZWNrZWRSYWRpb0J1dHRvbnMpOgorICAgICAgICBDaGVja2luZyBhdHRhY2hlZCgpIHdhcyB3
cm9uZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OndpbGxDaGFuZ2VGb3Jt
KToKKyAgICAgICAgUmVtb3ZlIHRoaXMgcmFkaW8gYnV0dG9uIGZyb20gYSByYWRpbyBidXR0b24g
Z3JvdXAgZm9yIHRoZSBvbGQgZm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmRpZENoYW5nZUZvcm0pOgorICAgICAgICBBZGQgdGhpcyByYWRpbyBidXR0b24gdG8gYSBy
YWRpbyBidXR0b24gZ3JvdXAgZm9yIHRoZSBuZXcgZm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgQWRkIENoZWNr
ZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbigpIGNhbGwuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAgQWRkIENoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbigpIGNhbGwuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6CisgICAgICAgIFdlIGRvbid0IG5l
ZWQgdG8gaGFuZGxlIENoZWNrZWRSYWRpb0J1dHRvbigpIGhlcmUgYmVjYXVzZQorICAgICAgICBy
ZW1vdmVkRnJvbURvY3VtZW50KCkgaGFuZGxlcyBpdC4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudCk6IFVzZSBz
ZXRGb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmpl
Y3RFbGVtZW50KToKKyAgICAgICAgcmVtb3ZlRm9ybUVsZW1lbnQoKSBpcyBub3QgbmVlZGVkLiB+
Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgdHJlYXRzIGl0LgorCiAyMDExLTEyLTI1ICBIYWppbWUg
TW9ycml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA2NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNr
ZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IDM4ZTVlZmJiYzkxYzYwY2NiNDVhNTQ2NmU1ZmI0YjI5
YzA3NDFhZTAuLjRlNzg4NGMzMTZjYzg2MjEwZTljODg3M2VjMjg3YjZjZTBlYWQ5ZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTI1LDM0ICsyNSwz
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6
YWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2hvdWxkTWFrZVJhZGlvR3JvdXAoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWRkIHJhZGlvIGJ1dHRvbnMuCi0gICAgaWYgKCFlbGVt
ZW50LT5pc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gZWxlbWVu
dC0+aXNSYWRpb0J1dHRvbigpICYmICFlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpICYmIGVsZW1l
bnQtPmluRG9jdW1lbnQoKTsKK30KIAotICAgIC8vIFdpdGhvdXQgYSBuYW1lLCB0aGVyZSBpcyBu
byBncm91cC4KLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKK3ZvaWQgQ2hlY2tl
ZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgaWYgKCFzaG91bGRNYWtlUmFkaW9Hcm91cChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KGVsZW1lbnQpOwotCiAgICAgLy8gV2Ugb25seSB0cmFjayBjaGVja2VkIGJ1
dHRvbnMuCi0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmNoZWNrZWQoKSkKKyAgICBpZiAoIWVsZW1l
bnQtPmNoZWNrZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX25hbWVUb0NoZWNr
ZWRSYWRpb0J1dHRvbk1hcCkKICAgICAgICAgbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAg
PSBhZG9wdFB0cihuZXcgTmFtZVRvSW5wdXRNYXApOwogCi0gICAgcGFpcjxOYW1lVG9JbnB1dE1h
cDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFw
LT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgaW5wdXRFbGVtZW50KTsKKyAgICBwYWlyPE5h
bWVUb0lucHV0TWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9uYW1lVG9DaGVja2VkUmFk
aW9CdXR0b25NYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBlbGVtZW50KTsKICAgICBp
ZiAocmVzdWx0LnNlY29uZCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIG9sZENoZWNrZWRCdXR0b24gPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKLSAgICBpZiAo
b2xkQ2hlY2tlZEJ1dHRvbiA9PSBpbnB1dEVsZW1lbnQpCisgICAgaWYgKG9sZENoZWNrZWRCdXR0
b24gPT0gZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVzdWx0LmZpcnN0LT5zZWNv
bmQgPSBpbnB1dEVsZW1lbnQ7CisgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBlbGVtZW50Owog
ICAgIG9sZENoZWNrZWRCdXR0b24tPnNldENoZWNrZWQoZmFsc2UpOwogfQogCkBAIC02Niw5ICs2
NCwxMSBAQCBIVE1MSW5wdXRFbGVtZW50KiBDaGVja2VkUmFkaW9CdXR0b25zOjpjaGVja2VkQnV0
dG9uRm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJgogICAgIHJldHVybiBtX25hbWVUb0NoZWNr
ZWRSYWRpb0J1dHRvbk1hcC0+Z2V0KG5hbWUuaW1wbCgpKTsKIH0KIAotdm9pZCBDaGVja2VkUmFk
aW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkK
K3ZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkgfHwgIW1fbmFt
ZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwKQorICAgIGlmICghc2hvdWxkTWFrZVJhZGlvR3JvdXAo
ZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fbmFtZVRvQ2hlY2tlZFJhZGlv
QnV0dG9uTWFwKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgbV9uYW1lVG9DaGVja2VkUmFk
aW9CdXR0b25NYXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTc3LDkgKzc3LDcgQEAgdm9pZCBD
aGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCog
ZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmVu
ZCgpIHx8IGl0LT5zZWNvbmQgIT0gZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50
KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChpbnB1dEVsZW1lbnQsIGlucHV0RWxlbWVudCk7Ci0gICAg
QVNTRVJUKGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpKTsKKyAgICBBU1NFUlQo
ZWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpKTsKICAgICBBU1NFUlQoZWxlbWVudC0+aXNS
YWRpb0J1dHRvbigpKTsKIAogICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5yZW1v
dmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKaW5kZXggMGZh
NDU3YWNiNDYyZDdlYmUxYWNjNWE3ZTlhOWYwM2NmMzhlOWU4MS4uOTI1YjUwNjc4MmE0MWMyN2Qx
NTQ3ZWYwMTk5YWQ5NWY1YmRhMzIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0No
ZWNrZWRSYWRpb0J1dHRvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlv
QnV0dG9ucy5oCkBAIC0yNywxMyArMjcsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIAog
Y2xhc3MgQ2hlY2tlZFJhZGlvQnV0dG9ucyB7CiBwdWJsaWM6Ci0gICAgdm9pZCBhZGRCdXR0b24o
SFRNTEZvcm1Db250cm9sRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7
CisgICAgdm9pZCByZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCopOwogICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIGdyb3Vw
TmFtZSkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5jcHAKaW5kZXggZmViMWQwZDdhMDcyNWQxMjQ5MWFiMTEwOGZjNGIyYzBl
MDVhMGQ4OS4uZTcyYjVlNmZkODlmM2RmZWFlZWRlYTk0NjQ4NTMxMDhlZGU2Y2JiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcApAQCAtMzUsMTMg
KzM1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZv
cm1FbGVtZW50KiBmb3JtKQotICAgIDogbV9mb3JtKGZvcm0pCitGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpCisgICAgOiBtX2Zvcm0oMCkKIHsKIH0KIAogRm9y
bUFzc29jaWF0ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKIHsKKyAgICBzZXRG
b3JtKDApOwogfQogCiBWYWxpZGl0eVN0YXRlKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlk
aXR5KCkKQEAgLTgwLDE1ICs4MSwxMiBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvVHJlZSgpCiAgICAgICAgIC8vIFJlc2V0cyB0aGUgZm9ybSBvd25lciBhdCBmaXJz
dCB0byBtYWtlIHN1cmUgdGhlIGVsZW1lbnQgZG9uJ3QKICAgICAgICAgLy8gYXNzb2NpYXRlIGFu
eSBmb3JtIGVsZW1lbnRzIHdoZW4gdGhlcmUgaXMgbm8gZWxlbWVudCB3aGljaCBoYXMKICAgICAg
ICAgLy8gdGhlIGdpdmVuIElELgotICAgICAgICBpZiAobV9mb3JtKSB7Ci0gICAgICAgICAgICBt
X2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICAgICAgbV9mb3JtID0gMDsK
LSAgICAgICAgfQorICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSAwOwogICAgICAg
ICBFbGVtZW50KiBmb3JtRWxlbWVudCA9IGVsZW1lbnQtPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50
QnlJZChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CiAgICAgICAgIGlmIChm
b3JtRWxlbWVudCAmJiBmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAg
ICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZm9ybUVsZW1lbnQp
OwotICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAg
ICAgICAgbmV3Rm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZvcm1FbGVtZW50
KTsKICAgICAgICAgfQorICAgICAgICBzZXRGb3JtKG5ld0Zvcm0pOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmICghbV9mb3JtKSB7CkBAIC05Niw5ICs5NCw3IEBAIHZvaWQgRm9ybUFz
c29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKCkKICAgICAgICAgLy8gSmF2YVNjcmlw
dCBhbmQgaW5zZXJ0ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIK
ICAgICAgICAgLy8gc2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51
bGwgdmFsdWUgZm9yIG1fZm9ybSwKICAgICAgICAgLy8gYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcuCi0gICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3Io
KTsKLSAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3Jt
RWxlbWVudCh0aGlzKTsKKyAgICAgICAgc2V0Rm9ybShlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9y
KCkpOwogICAgIH0KIH0KIApAQCAtMTE3LDE1ICsxMTMsMzcgQEAgdm9pZCBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSgpCiAgICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVsZW1l
bnQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24gdG8g
dGhlIGZvcm0uCiAgICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3Zl
IG91cnNlbHZlcyBmcm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBlbGVtZW50cy4KICAgICBpZiAobV9m
b3JtICYmIGZpbmRSb290KGVsZW1lbnQpICE9IGZpbmRSb290KG1fZm9ybSkpCi0gICAgICAgIHJl
bW92ZUZyb21Gb3JtKCk7CisgICAgICAgIHNldEZvcm0oMCk7Cit9CisKK3ZvaWQgRm9ybUFzc29j
aWF0ZWRFbGVtZW50OjpzZXRGb3JtKEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSkKK3sKKyAgICBp
ZiAobV9mb3JtID09IG5ld0Zvcm0pCisgICAgICAgIHJldHVybjsKKyAgICB3aWxsQ2hhbmdlRm9y
bSgpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQo
dGhpcyk7CisgICAgbV9mb3JtID0gbmV3Rm9ybTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBt
X2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgZGlkQ2hhbmdlRm9ybSgpOwog
fQogCi12b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQordm9pZCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1EZXN0cm95ZWQoKQogewogICAgIGlmICghbV9mb3Jt
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsK
KyAgICB3aWxsQ2hhbmdlRm9ybSgpOwogICAgIG1fZm9ybSA9IDA7CisgICAgZGlkQ2hhbmdlRm9y
bSgpOworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbENoYW5nZUZvcm0oKQor
eworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGlkQ2hhbmdlRm9ybSgpCit7CiB9
CiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcigpCkBAIC0xMzUs
OSArMTUzLDggQEAgdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKCkK
ICAgICBpZiAobV9mb3JtKSB7CiAgICAgICAgIGlmIChmb3JtSWQuaXNOdWxsKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CiAg
ICAgfQotICAgIG1fZm9ybSA9IDA7CisgICAgSFRNTEZvcm1FbGVtZW50KiBuZXdGb3JtID0gMDsK
ICAgICBpZiAoIWZvcm1JZC5pc051bGwoKSAmJiBlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsKICAg
ICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBh
c3NvY2lhdGVkIHdpdGgKICAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3Vt
ZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bwpAQCAtMTQ1LDExICsxNjIsMTAgQEAgdm9p
ZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKCkKICAgICAgICAgLy8gdHJl
ZVNjb3BlKCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVudC4KICAgICAg
ICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZWxlbWVudC0+dHJlZVNjb3BlKCktPmdldEVsZW1l
bnRCeUlkKGZvcm1JZCk7CiAgICAgICAgIGlmIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50
LT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVtZW50KTsKKyAgICAgICAgICAgIG5ld0Zvcm0gPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOwogICAgIH0gZWxzZQot
ICAgICAgICBtX2Zvcm0gPSBlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgaWYgKG1f
Zm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAg
ICBuZXdGb3JtID0gZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpOworICAgIHNldEZvcm0obmV3
Rm9ybSk7CiB9CiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hh
bmdlZCgpCkBAIC0xNTcsMTEgKzE3Myw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpm
b3JtQXR0cmlidXRlQ2hhbmdlZCgpCiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KHRoaXMpOwogICAgIGlmICghZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0
cikpIHsKICAgICAgICAgLy8gVGhlIGZvcm0gYXR0cmlidXRlIHJlbW92ZWQuIFdlIG5lZWQgdG8g
cmVzZXQgZm9ybSBvd25lciBoZXJlLgotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAg
bV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgbV9mb3JtID0gZWxlbWVu
dC0+ZmluZEZvcm1BbmNlc3RvcigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAg
Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBzZXRGb3JtKGVsZW1l
bnQtPmZpbmRGb3JtQW5jZXN0b3IoKSk7CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVu
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwogICAgIH0gZWxzZQog
ICAgICAgICByZXNldEZvcm1Pd25lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmgKaW5kZXggMWE4ZTE2NTdlZmYzZjlhNWRjZTViZWZjODM1YmMzYjk2ZDU4
OTM0NC4uZTZkNTFlOGE2ZGMwYTg1YzlkNzI2MWQzYmYzNDQwMGY4NGM0OThlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCkBAIC01MywxMiArNTMsMTIg
QEAgcHVibGljOgogICAgIC8vIFJldHVybiB0cnVlIGZvciBhIHN1Y2Nlc3NmdWwgY29udHJvbCAo
c2VlIEhUTUw0LTE3LjEzLjIpLgogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3Jt
RGF0YUxpc3QmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGZv
cm1EZXN0cm95ZWQoKSB7IG1fZm9ybSA9IDA7IH0KKyAgICB2b2lkIGZvcm1EZXN0cm95ZWQoKTsK
IAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoKTsKIAogcHJvdGVjdGVkOgotICAgIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQoKTsKIAogICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpOwogICAgIHZvaWQgcmVtb3ZlZEZy
b21UcmVlKCk7CkBAIC02NiwxMCArNjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwogICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQq
IG9sZERvY3VtZW50KTsKIAotICAgIHZvaWQgc2V0Rm9ybShIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
IHsgbV9mb3JtID0gZm9ybTsgfQotICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICB2b2lk
IHNldEZvcm0oSFRNTEZvcm1FbGVtZW50Kik7CiAgICAgdm9pZCBmb3JtQXR0cmlidXRlQ2hhbmdl
ZCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VGb3JtKCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUZvcm0oKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA4ZmU0NTA0YWU2OWVhMWY1
YjY2YmY1ODkxNmQ0YmZkMGM5NWI3OTcyLi45ZTA0ZTA2N2YxYzUxZjQyNWI2NzExOTA5NWIxOTBj
MDQ3MDMwM2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkK
ICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgRm9ybUFzc29jaWF0
ZWRFbGVtZW50KGZvcm0pCisgICAgLCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKQogICAgICwgbV9k
aXNhYmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVk
KGZhbHNlKQpAQCAtNjEsMTggKzYxLDEyIEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jCiAgICAg
LCBtX3dhc0NoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGZhbHNlKQogICAg
ICwgbV9oYXNBdXRvZm9jdXNlZChmYWxzZSkKIHsKLSAgICBpZiAoIXRoaXMtPmZvcm0oKSkKLSAg
ICAgICAgc2V0Rm9ybShmaW5kRm9ybUFuY2VzdG9yKCkpOwotICAgIGlmICh0aGlzLT5mb3JtKCkp
Ci0gICAgICAgIHRoaXMtPmZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLQorICAg
IHNldEZvcm0oZm9ybSA/IGZvcm0gOiBmaW5kRm9ybUFuY2VzdG9yKCkpOwogICAgIHNldEhhc0N1
c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCk7CiB9CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCkKIHsKLSAgICBpZiAoZm9ybSgpKQotICAgICAgICBm
b3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRldGFjaCgpCkBAIC0xMTAsOCArMTA0LDYgQEAgdm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikgewogICAgICAgICBmb3JtQXR0cmlidXRlQ2hh
bmdlZCgpOwotICAgICAgICBpZiAoIWZvcm0oKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBt
X2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwpAQCAtMjA1
LDkgKzE5Nyw2IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9j
dW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIHsKICAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6Omluc2VydGVkSW50b1RyZWUoKTsKLSAgICBpZiAoIWZvcm0oKSkKLSAgICAgICAgZG9jdW1l
bnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKLQogICAgIEhUTUxF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNzk3YTA4MjM2NjRmMjlkMWI1NDI1MjAyNmVkN2IzZmZl
NTNiODJlNi4uZTM2ODNmNGZjMGJmM2Y1NzUyMGFiMTc5M2M1OTVhMzJjODhiZjg0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNDU2LDE4ICs0NTYsMTEgQEAg
dW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCogYXNzb2NpYXRlZEVsZW0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVy
Rm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlKQogewotICAgIGlmIChlLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZSk7Ci0gICAgICAg
IGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24oZWxlbWVudCk7
Ci0gICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5hZGRCdXR0b24oZWxlbWVudCk7Ci0gICAg
fQogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmluc2VydChmb3JtRWxlbWVudEluZGV4KGUpLCBl
KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBpZiAoZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgbV9jaGVja2VkUmFkaW9CdXR0b25zLnJlbW92ZUJ1dHRvbihzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZSkpOwogICAgIHVuc2lnbmVkIGluZGV4OwogICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpbmRl
eCkgewogICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaW5kZXhdID09IGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA0NmQxMDQ5YmRlYjk5ZjY3
ZGQzYzdmNjYxMTRlNWRlYTMyY2EwOWJkLi5hYjQ4ZDhmY2UxYjI5NzQ0NjY0YzMyOTcxNzVjZGIz
YmY3NTQ2NTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAg
LTExNSwxMiArMTE1LDYgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQog
ewogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQogICAgICAgICBkb2N1bWVudCgp
LT51bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLQotICAg
IGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7Ci0K
LSAgICAvLyBOZWVkIHRvIHJlbW92ZSB0aGlzIGZyb20gdGhlIGZvcm0gd2hpbGUgaXQgaXMgc3Rp
bGwgYW4gSFRNTElucHV0RWxlbWVudCwKLSAgICAvLyBzbyBjYW4ndCB3YWl0IGZvciB0aGUgYmFz
ZSBjbGFzcydzIGRlc3RydWN0b3IgdG8gZG8gaXQuCi0gICAgcmVtb3ZlRnJvbUZvcm0oKTsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUo
KSBjb25zdApAQCAtMTc5LDggKzE3Myw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2hvdWxk
QXV0b2NvbXBsZXRlKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVj
a2VkUmFkaW9CdXR0b25zKCkKIHsKLSAgICBpZiAoYXR0YWNoZWQoKSAmJiBjaGVja2VkKCkpCi0g
ICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgY2hlY2tl
ZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKIAogICAgIGlmIChmb3JtKCkpIHsKICAg
ICAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBjb250cm9scyA9IGZv
cm0oKS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CkBAIC0xNTAyLDYgKzE0OTUsMjggQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKQogICAgIHJl
c2V0KCk7CiB9CiAKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6d2lsbENoYW5nZUZvcm0oKQorewor
ICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7Cit9CisKK3ZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGlkQ2hhbmdlRm9ybSgpCit7CisgICAgY2hlY2tlZFJhZGlvQnV0
dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCit7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRv
bih0aGlzKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50
KCkKK3sKKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOworICAg
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Cit9CisK
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9s
ZERvY3VtZW50KQogewogICAgIG1faW5wdXRUeXBlLT53aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCAwNTQ0MzZkZDQ2
NzYwMmMzZTExOTlmZTY4YmY5NGYzMDUxYjI2ZTNlLi5kMjEyNDRkMzlkNzUyYTM2M2IyYzdhNWU2
OTJhNWU5MTIxMmRlZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApA
QCAtMjQ5LDYgKzI0OSwxMCBAQCBwcml2YXRlOgogICAgIGVudW0gQXV0b0NvbXBsZXRlU2V0dGlu
ZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKICAgICBlbnVtIEFueVN0ZXBIYW5kbGluZyB7
IFJlamVjdEFueSwgQW55SXNEZWZhdWx0U3RlcCB9OwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxD
aGFuZ2VGb3JtKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUZvcm0oKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQp
IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9h
cmRFdmVudCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cAppbmRleCBlOWJjMzZjMjQ0YWFiYWI1NjM5ODIwZDc2MDI3ODNlOTkwZTNhZWRkLi5lZThiNmY1
NzY4MTZiZTJmNTRmYmFlOTVkYWIzMTdhMzAzOWUzMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNTUsMjEgKzU1LDE2IEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIGlubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKICAgICA6IEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlciwgU2hvdWxk
Tm90UHJlZmVyUGx1Z0luc0ZvckltYWdlcykKLSAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChm
b3JtKQorICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKICAgICAsIG1fZG9jTmFtZWRJdGVt
KHRydWUpCiAgICAgLCBtX3VzZUZhbGxiYWNrQ29udGVudChmYWxzZSkKIHsKICAgICBBU1NFUlQo
aGFzVGFnTmFtZShvYmplY3RUYWcpKTsKLSAgICBpZiAoIXRoaXMtPmZvcm0oKSkKLSAgICAgICAg
c2V0Rm9ybShmaW5kRm9ybUFuY2VzdG9yKCkpOwotICAgIGlmICh0aGlzLT5mb3JtKCkpCi0gICAg
ICAgIHRoaXMtPmZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBzZXRGb3Jt
KGZvcm0gPyBmb3JtIDogZmluZEZvcm1BbmNlc3RvcigpKTsKIH0KIAogaW5saW5lIEhUTUxPYmpl
Y3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQoKQogewotICAgIGlmIChmb3JtKCkpCi0gICAg
ICAgIGZvcm0oKS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRN
TE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0s
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjN2UwZDAxNDFjYzFhYjBjMjgyMzY0MjIz
NjNkMTNhMzllYTY1ZjYuLjQzZDNkOWYyMGEwNGM0MTdjZWJmYWQ0Nzk3ZTg3YTEzZTdhMzlhYmEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMi0yNSAgS2VudCBUYW11cmEgIDx0a2VudEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgQSByYWRpbyBidXR0b24gbm90IGluIGEgRG9jdW1lbnQg
c2hvdWxkIG5vdCBqb2luIGEgcmFkaW8gYnV0dG9uIGdyb3VwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTcxOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91
cC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvcmFkaW8vcmFkaW8t
Z3JvdXAuaHRtbDogQWRkZWQuCisKIDIwMTEtMTItMjQgIEphcnJlZCBOaWNob2xscyAgPGphcnJl
ZEBzZW5jaGEuY29tPgogCiAgICAgICAgIEFsbG93IFhNTEh0dHBSZXF1ZXN0IHJlc3BvbnNlVHlw
ZSB0byBiZSBzZXQgYXQgYW55IHN0YXRlIHVwIHRvIGFuZCBpbmNsdWRpbmcgSEVBREVSU19SRUNF
SVZFRApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91
cC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3Vw
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2I5ZTJkNDU3YTQwMDYwOGEzMWY5MjYwNmVkY2M4
MTExNWJhYTVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRp
by9yYWRpby1ncm91cC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MSBAQAorVmFyaW91cyB0ZXN0
cyBhYm91dCByYWRpbyBidXR0b24gZ3JvdXAuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitNb3ZpbmcgYSBjaGVja2VkIHJhZGlvIGJ1dHRvbiB0byBhbm90aGVyIGZvcm06CitQQVNT
ICQoIm91dHNpZGUiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgiaW5zaWRlIikuY2hlY2tlZCBp
cyB0cnVlCitQQVNTICQoImluc2lkZTIiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgib3V0c2lk
ZSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJpbnNpZGUiKS5jaGVja2VkIGlzIGZhbHNlCitQ
QVNTICQoImluc2lkZTIiKS5jaGVja2VkIGlzIHRydWUKK1doZW4gYSByYWRpbyBpbiBhIGZvcm0g
aXMgcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBhZmZlY3QgRG9jdW1lbnQtbGV2ZWwgZ3JvdXBzOgor
UEFTUyAkKCJvdXRzaWRlIikuY2hlY2tlZCBpcyB0cnVlCisKK1JlbW92aW5nIGFuIGFuY2VzdG9y
IG93bmVyIGZvcm06CitQQVNTICQoInJhZGlvMC0xIikuY2hlY2tlZCBpcyB0cnVlCisKK0NoYW5n
aW5nIGZvcm0gYXR0cmlidXRlCitQQVNTICQoInJhZGlvMS0xIikuY2hlY2tlZCBpcyB0cnVlCitQ
QVNTICQoInJhZGlvMS0yIikuY2hlY2tlZCBpcyBmYWxzZQorUEFTUyAkKCJyYWRpbzEtMyIpLmNo
ZWNrZWQgaXMgdHJ1ZQorUmVtb3ZpbmcgYSBub24tYW5jZXN0b3Igb3duZXIgZm9ybToKK1BBU1Mg
JCgicmFkaW8xLTMiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTQiKS5jaGVja2Vk
IGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlzIGZhbHNlCitQQVNTICQoInJh
ZGlvMS0zIikuY2hlY2tlZCBpcyB0cnVlCisKK0FkZGluZyBhIHJhZGlvIGJ1dHRvbiB0byBhbiBv
cnBoYW4gdHJlZToKK1BBU1Mgb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIp
WzBdLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ImlucHV0IilbMV0uY2hlY2tlZCBpcyB0cnVlCitBZGRpbmcgdGhlIG9ycGhhbiB0cmVlIHRvIGEg
ZG9jdW1lbnQ6CitQQVNTIG9ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsw
XS5jaGVja2VkIGlzIGZhbHNlCitQQVNTIG9ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
aW5wdXQiKVsxXS5jaGVja2VkIGlzIHRydWUKK1BhcnNpbmcgYW4gb3JwaGFuIGZvcm06CitQQVNT
IG9ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkIGlzIHRy
dWUKK1BBU1Mgb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzFdLmNoZWNr
ZWQgaXMgdHJ1ZQorCitNb3ZpbmcgYSByYWRpbyBidXR0b24gdG8gYW5vdGhlciBEb2N1bWVudDoK
K1BBU1MgZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMiIpLmNoZWNrZWQgaXMgZmFsc2UKK1BB
U1MgZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyBk
b2MuZ2V0RWxlbWVudEJ5SWQoInJhZGlvNC0xIikuY2hlY2tlZCBpcyB0cnVlCisKK0Nsb25pbmcg
YSByYWRpbyBidXR0b246CitQQVNTIG9yaWdpbmFsLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyBjbG9u
ZWRSYWRpby5jaGVja2VkIGlzIHRydWUKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
cmFkaW8vcmFkaW8tZ3JvdXAuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFk
aW8tZ3JvdXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTIyODg2YWVhOWNjYTlmMjgyYWQ5YWQxZjg1ODg2
ZTgwZGQzYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRp
by9yYWRpby1ncm91cC5odG1sCkBAIC0wLDAgKzEsMTIyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisKKzxkaXYgaWQ9InBhcmVudCI+Cis8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im5h
bWUxIiBjaGVja2VkIGlkPSJvdXRzaWRlIj4KKzxmb3JtIGlkPSJmb3JtMSI+Cis8aW5wdXQgdHlw
ZT0icmFkaW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlkPSJpbnNpZGUiPgorPC9mb3JtPgorPGZv
cm0gaWQ9ImZvcm0yIj4KKzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ibmFtZTEiIGNoZWNrZWQg
aWQ9Imluc2lkZTIiPgorPC9mb3JtPgorPC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbign
VmFyaW91cyB0ZXN0cyBhYm91dCByYWRpbyBidXR0b24gZ3JvdXAuJyk7CisKK2NvbnN0IENoZWNr
ZWQgPSB0cnVlOworY29uc3QgVW5jaGVja2VkID0gZmFsc2U7CisKK2Z1bmN0aW9uIGNyZWF0ZVJh
ZGlvKG5hbWUsIGNoZWNrZWQsIGlkKSB7CisgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnaW5wdXQnKTsKKyAgICBpbnB1dC50eXBlID0gJ3JhZGlvJzsKKyAgICBpbnB1dC5u
YW1lID0gbmFtZTsKKyAgICBpbnB1dC5jaGVja2VkID0gISFjaGVja2VkOworICAgIGlucHV0Lmlk
ID0gaWQ7CisgICAgcmV0dXJuIGlucHV0OworfQorCitmdW5jdGlvbiAkKGlkKSB7CisgICAgcmV0
dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKK30KKwordmFyIHBhcmVudCA9ICQoJ3Bh
cmVudCcpOworZGVidWcoJ01vdmluZyBhIGNoZWNrZWQgcmFkaW8gYnV0dG9uIHRvIGFub3RoZXIg
Zm9ybTonKTsKK3Nob3VsZEJlVHJ1ZSgnJCgib3V0c2lkZSIpLmNoZWNrZWQnKTsKK3Nob3VsZEJl
VHJ1ZSgnJCgiaW5zaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIiku
Y2hlY2tlZCcpOworJCgnZm9ybTEnKS5hcHBlbmRDaGlsZCgkKCdpbnNpZGUyJykpOworc2hvdWxk
QmVUcnVlKCckKCJvdXRzaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVGYWxzZSgnJCgiaW5zaWRl
IikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcpOworZGVi
dWcoJ1doZW4gYSByYWRpbyBpbiBhIGZvcm0gaXMgcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBhZmZl
Y3QgRG9jdW1lbnQtbGV2ZWwgZ3JvdXBzOicpOworcGFyZW50LnJlbW92ZUNoaWxkKCQoJ2Zvcm0x
JykpOworc2hvdWxkQmVUcnVlKCckKCJvdXRzaWRlIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7
CitkZWJ1ZygnUmVtb3ZpbmcgYW4gYW5jZXN0b3Igb3duZXIgZm9ybTonKTsKK3BhcmVudC5pbm5l
ckhUTUwgPSAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMCBjaGVja2VkIGlkPXJhZGlvMC0x
PicgKworICAgICc8Zm9ybSBpZD1mb3JtMT48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUwIGNo
ZWNrZWQgaWQ9cmFkaW8wLTI+PC9mb3JtPic7CitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEn
KSk7CitnYygpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzAtMSIpLmNoZWNrZWQnKTsKKworZGVi
dWcoJycpOworZGVidWcoJ0NoYW5naW5nIGZvcm0gYXR0cmlidXRlJyk7CitwYXJlbnQuaW5uZXJI
VE1MID0gJzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1yYWRpbzEtMT4n
ICsKKyAgICAnPGZvcm0gaWQ9Zm9ybTE+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVj
a2VkIGlkPXJhZGlvMS0yPjwvZm9ybT4nICsKKyAgICAnPGZvcm0gaWQ9Zm9ybTI+PGlucHV0IHR5
cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVja2VkIGlkPXJhZGlvMS0zPjwvZm9ybT4nOworJCgncmFk
aW8xLTMnKS5zZXRBdHRyaWJ1dGUoJ2Zvcm0nLCAnZm9ybTEnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgi
cmFkaW8xLTEiKS5jaGVja2VkJyk7CitzaG91bGRCZUZhbHNlKCckKCJyYWRpbzEtMiIpLmNoZWNr
ZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTMiKS5jaGVja2VkJyk7CisKK2RlYnVnKCdS
ZW1vdmluZyBhIG5vbi1hbmNlc3RvciBvd25lciBmb3JtOicpOworJCgnZm9ybTInKS5hcHBlbmRD
aGlsZChjcmVhdGVSYWRpbygnbmFtZTEnLCBDaGVja2VkLCAncmFkaW8xLTQnKSk7CitzaG91bGRC
ZVRydWUoJyQoInJhZGlvMS0zIikuY2hlY2tlZCcpOworLy8gSWYgdGhlcmUgaXMgbm8gZWxlbWVu
dHMgd2l0aCBJRCBzcGVjaWZpZWQgYnkgZm9ybT0gYXR0cmlidXRlLCB0aGUgZm9ybQorLy8gY29u
dHJvbCBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkgZm9ybXMuCitwYXJlbnQucmVtb3ZlQ2hpbGQo
JCgnZm9ybTEnKSk7CisvLyBGSVhNRTogV2UgbmVlZCB0byBjYWxsIGdjKCkgdHdpY2Ugb24gQXBw
bGUgTWFjLgorZ2MoKTsKK2djKCk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS00IikuY2hlY2tl
ZCcpOworLy8gVGhlIGZvbGxvd2luZyB0ZXN0IGRlcGVuZHMgb24gZ2MoKS4gSXQgbWlnaHQgZmFp
bCBvbiBhIHJlYWwgYnJvd3Nlci4KK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hlY2tl
ZCcpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMyIpLmNoZWNrZWQnKTsKKworZGVidWcoJycp
OworZGVidWcoJ0FkZGluZyBhIHJhZGlvIGJ1dHRvbiB0byBhbiBvcnBoYW4gdHJlZTonKTsKK3Zh
ciBvcnBoYW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK29ycGhhbkRpdi5h
cHBlbmRDaGlsZChjcmVhdGVSYWRpbygnbmFtZTInLCBDaGVja2VkLCAnJykpOworb3JwaGFuRGl2
LmFwcGVuZENoaWxkKGNyZWF0ZVJhZGlvKCduYW1lMicsIENoZWNrZWQsICcnKSk7CitzaG91bGRC
ZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2Vk
Jyk7CitzaG91bGRCZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQi
KVsxXS5jaGVja2VkJyk7CitkZWJ1ZygnQWRkaW5nIHRoZSBvcnBoYW4gdHJlZSB0byBhIGRvY3Vt
ZW50OicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvcnBoYW5EaXYpOworc2hvdWxkQmVG
YWxzZSgnb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLmNoZWNrZWQn
KTsKK3Nob3VsZEJlVHJ1ZSgnb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIp
WzFdLmNoZWNrZWQnKTsKKworZGVidWcoJ1BhcnNpbmcgYW4gb3JwaGFuIGZvcm06Jyk7Citkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKG9ycGhhbkRpdik7CitvcnBoYW5EaXYuaW5uZXJIVE1MID0g
Jzxmb3JtPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTMgY2hlY2tlZD48aW5wdXQgdHlwZT1y
YWRpbyBuYW1lPW5hbWUzIGNoZWNrZWQ+PC9mb3JtPic7CitzaG91bGRCZVRydWUoJ29ycGhhbkRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkJyk7CitzaG91bGRCZVRy
dWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkJyk7
CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdNb3ZpbmcgYSByYWRpbyBidXR0b24gdG8gYW5vdGhlciBE
b2N1bWVudDonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1u
YW1lNCBjaGVja2VkIGlkPXJhZGlvNC0xPic7Cit2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50
YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7Citkb2MuYm9keS5pbm5lckhUTUwgPSAnPGlucHV0
IHR5cGU9cmFkaW8gbmFtZT1uYW1lNCBjaGVja2VkIGlkPXJhZGlvNC0yPic7Citkb2MuYm9keS5h
cHBlbmRDaGlsZChkb2MuYWRvcHROb2RlKCQoJ3JhZGlvNC0xJykpKTsKK3Nob3VsZEJlRmFsc2Uo
J2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTIiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUo
J2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVja2VkJyk7CitwYXJlbnQuYXBwZW5k
Q2hpbGQoY3JlYXRlUmFkaW8oJ25hbWU0JywgQ2hlY2tlZCwgJycpKTsKK3Nob3VsZEJlVHJ1ZSgn
ZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOwor
ZGVidWcoJ0Nsb25pbmcgYSByYWRpbyBidXR0b246Jyk7Cit2YXIgb3JpZ2luYWwgPSBjcmVhdGVS
YWRpbygnbmFtZTUnLCBDaGVja2VkLCAnJyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJyc7CitwYXJl
bnQuYXBwZW5kQ2hpbGQob3JpZ2luYWwpOwordmFyIGNsb25lZFJhZGlvID0gb3JpZ2luYWwuY2xv
bmVOb2RlKHRydWUpOworc2hvdWxkQmVUcnVlKCdvcmlnaW5hbC5jaGVja2VkJyk7CitzaG91bGRC
ZVRydWUoJ2Nsb25lZFJhZGlvLmNoZWNrZWQnKTsKKworcGFyZW50LmlubmVySFRNTCA9ICcnOwor
ZGVidWcoJycpOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121228</attachid>
            <date>2012-01-05 00:18:49 -0800</date>
            <delta_ts>2012-01-05 06:33:46 -0800</delta_ts>
            <desc>Patch by tkent 3</desc>
            <filename>bug-45719-20120105171847.patch</filename>
            <type>text/plain</type>
            <size>32070</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2I2NmFjOGEzMWRjYThi
ZjQ5ZTQwYWIzODUyNjE4NzE0OWEwOWE4My4uMmE1YzgzM2JlMmQ1MzFkYTZlNzc5NjZjZGI4NjMx
YzdhZGMxMTUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEyLTAxLTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBkb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgcGVyIHRoZSBz
dGFuZGFyZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvcnMsIHdlIHNob3VsZCBub3QgYWRkIGEK
KyAgICAgICAgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGRvY3VtZW50IHRvIGEgcmFkaW8gYnV0dG9u
IGdyb3VwLgorCisgICAgICAgIFNvLCBDaGVja2VkUmFkaW9CdXR0b24gbWVtYmVyIGZ1bmN0aW9u
cyBzaG91bGQgYmUgY2FsbGVkIGluCisgICAgICAgIGluc2VydGVkSW50b0RvY3VtZW50KCkgYW5k
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKSwgYW5kIHRoZXkgc2hvdWxkIGRvCisgICAgICAgIG5vdGhp
bmcgaWYgdGhlIHNwZWNpZmllZCByYWRpbyBidXR0b24gaXMgbm90IGluIGEgZG9jdW1lbnQuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBhIGJ1ZyB0aGF0IGZvcm0gb3duZXIgY2hh
bmdlIGJ5ICdmb3JtJyBhdHRyaWJ1dGUKKyAgICAgICAgZGlkbid0IHVwZGF0ZSByYWRpbyBidXR0
b24gZ3JvdXBzIGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3JhZGlvL3Jh
ZGlvLWdyb3VwLmh0bWwKKworICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNob3VsZE1ha2VSYWRpb0dyb3VwKTogQSBoZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgPGlucHV0PiBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRp
b0J1dHRvbnM6OmFkZEJ1dHRvbik6CisgICAgICAgIC0gQ2hhbmdlIHRoZSBhcmd1bWVudCB0eXBl
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAg
LSBVc2Ugc2hvdWxkTWFrZVJhZGlvR3JvdXAoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6IGRpdHRvLgorICAgICAgICAqIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmg6CisgICAgICAgICBDaGFuZ2UgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIGFk
ZEJ1dHRvbigpIGFuZCByZW1vdmVCdXR0b24oKToKKyAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIC0+IEhUTUxJbnB1dEVsZW1lbnQqLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgIERvIG5vdCB1cGRhdGUgbV9mb3JtIGV4Y2VwdCBpbiBz
ZXRGb3JtKCkgYW5kIGZvcm1EZXN0b3J5ZWQoKS4KKyAgICAgICAgIFRoaXMgaGVscHMgdXMgdG8g
Y2FsbCByZWdpc3RlckZvcm1FbGVtZW50KCkgYW5kIHJlbW92ZUZyb21FbGVtZW50KCkKKyAgICAg
ICAgIGNvcnJlY3RseSwgYW5kIGNhbGwgd2lsbENoYW5nZUZvcm0oKS9kaWRDaGFuZ2VGb3JtKCkg
aG9va3MgY29ycmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsQ2hhbmdlRm9ybSk6CisgICAgICAgIFRoaXMgdmly
dHVhbCBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvd25lciBmb3JtIGlzIHVkcGF0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRpZENoYW5nZUZvcm0p
OgorICAgICAgICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBvd25l
ciBmb3JtIHdhcyB1ZHBhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojp3aWxsRGVzdHJveUZvcm0pOgorICAgICAgICAtIFJlbmFtYWVkIGZyb20gZm9ybURlc3Rv
cnllZCgpCisgICAgICAgIC0gQWRkIGNhbGxzIHRvIHdpbGxCZVVuYXNzb2NpYXRlZEZyb21EZXN0
cm95aW5nRm9ybSgpIGFuZCB3YXNVbmFzc29jaWF0ZWRGcm9tRGVzdHJveWluZ0Zvcm0oKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbEJlVW5hc3NvY2lhdGVk
RnJvbURlc3Ryb3lpbmdGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6d2FzVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIpOiBVc2Ugc2V0Rm9ybSgp
LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRl
Q2hhbmdlZCk6IGRpdHRvLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOiBV
c2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICByZW1vdmVGb3JtRWxlbWVudCgpIGlz
IG5vdCBuZWVkZWQuIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSB0cmVhdHMgaXQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIE5vIG5lZWQgdG8gaGFuZGxlIENoZWNrZWRSYWRpb0J1dHRvbnMgaGVyZS4gSXQg
aXMgaGFuZGxlZCBieSBIVE1MSW5wdXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6IGRpdHRvLgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6fkhUTUxGb3JtRWxlbWVudCk6CisgICAgICAgICBSZW5hbWUgZm9ybURlc3Ryb3llZCgpIHdp
dGggd2lsbERlc3Ryb3lGb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6
OnJlZ2lzdGVyRm9ybUVsZW1lbnQpOgorICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBy
YWRpbyBidXR0b24gZ3JvdXBzIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OnJlbW92ZUZvcm1FbGVtZW50KTogZGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5w
dXRFbGVtZW50KToKKyAgICAgICAgQmVjYXVzZSByZW1vdmVkRnJvbURvY3VtZW50KCkgdW5yZWdp
c3RlcnMgdGhlIHJhZGlvIGJ1dHRvbiBmcm9tIGEgZ3JvdXAsCisgICAgICAgIHdlIG5lZWQgdG8g
ZG8gbm90aGluZyBoZXJlLiBFdmVuIGlmIHRoZSByYWRpbyBidXR0b24gaXMgZGVzdHJ1Y3RlZCB3
aXRoCisgICAgICAgIHRoZSBvd25lciBEb2N1bWVudCwgd2UgZG9uJ3QgbmVlZCB0byBjbGVhbiBk
b2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKToKKyAgICAgICAgQ2hlY2tp
bmcgYXR0YWNoZWQoKSB3YXMgd3JvbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50Ojp3aWxsQ2hhbmdlRm9ybSk6CisgICAgICAgIFJlbW92ZSB0aGlzIHJhZGlvIGJ1dHRvbiBm
cm9tIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0aGUgb2xkIGZvcm0uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkaWRDaGFuZ2VGb3JtKToKKyAgICAgICAgQWRkIHRoaXMg
cmFkaW8gYnV0dG9uIHRvIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0aGUgbmV3IGZvcm0uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsQmVVbmFzc29jaWF0ZWRGcm9t
RGVzdHJveWluZ0Zvcm0pOgorICAgICAgICBSZW1vdmUgdGhpcyByYWRpbyBidXR0b24gZnJvbSBh
IHJhZGlvIGJ1dHRvbiBncm91cCBmb3IgdGhlIG9sZCBmb3JtLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6d2FzVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKToKKyAg
ICAgICAgQWRkIHRoaXMgcmFkaW8gYnV0dG9uIHRvIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0
aGUgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCk6CisgICAgICAgIEFkZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0
b24oKSBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCk6CisgICAgICAgIEFkZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0
b24oKSBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRv
TmV3RG9jdW1lbnQpOgorICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBDaGVja2VkUmFk
aW9CdXR0b24oKSBoZXJlIGJlY2F1c2UKKyAgICAgICAgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGhh
bmRsZXMgaXQuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0
RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCk6CisgICAgICAgIHJl
bW92ZUZvcm1FbGVtZW50KCkgaXMgbm90IG5lZWRlZC4gfkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgp
IHRyZWF0cyBpdC4KKwogMjAxMi0wMS0wNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDA4NC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCAzOGU1ZWZi
YmM5MWM2MGNjYjQ1YTU0NjZlNWZiNGIyOWMwNzQxYWUwLi41YTdlNWM5NWNjOTlkMjYwNDRhY2M0
ODBkNjk5MTM4ZGY1ODBiY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1
dHRvbnMuY3BwCkBAIC0yNSwzNCArMjUsMzIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBlbGVtZW50KQorc3RhdGljIGlubGluZSBib29sIHNob3VsZE1ha2VSYWRpb0dyb3VwKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCByYWRp
byBidXR0b25zLgotICAgIGlmICghZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQotICAgICAgICBy
ZXR1cm47CisgICAgcmV0dXJuIGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSAmJiAhZWxlbWVudC0+
bmFtZSgpLmlzRW1wdHkoKSAmJiBlbGVtZW50LT5pbkRvY3VtZW50KCk7Cit9CiAKLSAgICAvLyBX
aXRob3V0IGEgbmFtZSwgdGhlcmUgaXMgbm8gZ3JvdXAuCi0gICAgaWYgKGVsZW1lbnQtPm5hbWUo
KS5pc0VtcHR5KCkpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghc2hvdWxkTWFrZVJhZGlvR3JvdXAoZWxl
bWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKLQogICAgIC8v
IFdlIG9ubHkgdHJhY2sgY2hlY2tlZCBidXR0b25zLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5j
aGVja2VkKCkpCisgICAgaWYgKCFlbGVtZW50LT5jaGVja2VkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIG1fbmFt
ZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0lucHV0TWFwKTsK
IAotICAgIHBhaXI8TmFtZVRvSW5wdXRNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX25h
bWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIGlu
cHV0RWxlbWVudCk7CisgICAgcGFpcjxOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgp
LmltcGwoKSwgZWxlbWVudCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBIVE1MSW5wdXRFbGVtZW50KiBvbGRDaGVja2VkQnV0dG9uID0gcmVzdWx0
LmZpcnN0LT5zZWNvbmQ7Ci0gICAgaWYgKG9sZENoZWNrZWRCdXR0b24gPT0gaW5wdXRFbGVtZW50
KQorICAgIGlmIChvbGRDaGVja2VkQnV0dG9uID09IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gaW5wdXRFbGVtZW50OworICAgIHJlc3VsdC5m
aXJzdC0+c2Vjb25kID0gZWxlbWVudDsKICAgICBvbGRDaGVja2VkQnV0dG9uLT5zZXRDaGVja2Vk
KGZhbHNlKTsKIH0KIApAQCAtNjYsOCArNjQsMTAgQEAgSFRNTElucHV0RWxlbWVudCogQ2hlY2tl
ZFJhZGlvQnV0dG9uczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYK
ICAgICByZXR1cm4gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmdldChuYW1lLmltcGwo
KSk7CiB9CiAKLXZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92
ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogeworICAgIGlmICghZWxlbWVudC0+
aXNSYWRpb0J1dHRvbigpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGVsZW1lbnQtPm5hbWUo
KS5pc0VtcHR5KCkgfHwgIW1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwKQogICAgICAgICBy
ZXR1cm47CiAgICAgCkBAIC03NywxMCArNzcsNyBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6
OnJlbW92ZUJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChp
dCA9PSBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+ZW5kKCkgfHwgaXQtPnNlY29uZCAh
PSBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGlucHV0RWxlbWVudCwgaW5wdXRFbGVtZW50KTsKLSAgICBBU1NFUlQoaW5wdXRFbGVtZW50
LT5zaG91bGRBcHBlYXJDaGVja2VkKCkpOwotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0
dG9uKCkpOworICAgIEFTU0VSVChlbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkpOwogCiAg
ICAgbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPnJlbW92ZShpdCk7CiAgICAgaWYgKG1f
bmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0NoZWNrZWRSYWRpb0J1dHRvbnMuaAppbmRleCAwZmE0NTdhY2I0NjJkN2ViZTFhY2M1YTdlOWE5
ZjAzY2YzOGU5ZTgxLi45MjViNTA2NzgyYTQxYzI3ZDE1NDdlZjAxOTlhZDk1ZjViZGEzMjI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKQEAgLTI3LDEzICsyNywx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ7CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogCiBjbGFzcyBDaGVja2VkUmFkaW9CdXR0b25z
IHsKIHB1YmxpYzoKLSAgICB2b2lkIGFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7
Ci0gICAgdm9pZCByZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIHZv
aWQgYWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUJ1dHRvbihI
VE1MSW5wdXRFbGVtZW50Kik7CiAgICAgSFRNTElucHV0RWxlbWVudCogY2hlY2tlZEJ1dHRvbkZv
ckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYgZ3JvdXBOYW1lKSBjb25zdDsKIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAppbmRleCBm
ZWIxZDBkN2EwNzI1ZDEyNDkxYWIxMTA4ZmM0YjJjMGUwNWEwZDg5Li5lZmUzMGUwN2Y5ODg3ZTli
NmI1NjNiNjg1ODJjYTk0ZDgyMWNmNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuY3BwCkBAIC0zNSwxMyArMzUsMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCi0gICAgOiBt
X2Zvcm0oZm9ybSkKK0Zvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
KCkKKyAgICA6IG1fZm9ybSgwKQogewogfQogCiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6On5Gb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoKQogeworICAgIHNldEZvcm0oMCk7CiB9CiAKIFZhbGlkaXR5U3Rh
dGUqIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dmFsaWRpdHkoKQpAQCAtODAsMTUgKzgxLDEyIEBA
IHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKCkKICAgICAgICAg
Ly8gUmVzZXRzIHRoZSBmb3JtIG93bmVyIGF0IGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgZWxlbWVu
dCBkb24ndAogICAgICAgICAvLyBhc3NvY2lhdGUgYW55IGZvcm0gZWxlbWVudHMgd2hlbiB0aGVy
ZSBpcyBubyBlbGVtZW50IHdoaWNoIGhhcwogICAgICAgICAvLyB0aGUgZ2l2ZW4gSUQuCi0gICAg
ICAgIGlmIChtX2Zvcm0pIHsKLSAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQo
dGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSAwOwotICAgICAgICB9CisgICAgICAgIEhUTUxG
b3JtRWxlbWVudCogbmV3Rm9ybSA9IDA7CiAgICAgICAgIEVsZW1lbnQqIGZvcm1FbGVtZW50ID0g
ZWxlbWVudC0+dHJlZVNjb3BlKCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUoZm9ybUF0dHIpKTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50
LT5oYXNUYWdOYW1lKGZvcm1UYWcpKSB7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICAgICAgICBtX2Zvcm0tPnJl
Z2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBuZXdGb3JtID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAgICB9CisgICAgICAgIHNl
dEZvcm0obmV3Rm9ybSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX2Zvcm0p
IHsKQEAgLTk2LDkgKzk0LDcgQEAgdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVk
SW50b1RyZWUoKQogICAgICAgICAvLyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNpZGUgYSBm
b3JtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNlcgogICAgICAgICAvLyBzZXR0aW5nIGEgZm9y
bSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3JtLAogICAg
ICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9m
b3JtID0gZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpOwotICAgICAgICBpZiAobV9mb3JtKQot
ICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBz
ZXRGb3JtKGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKSk7CiAgICAgfQogfQogCkBAIC0xMTcs
MTUgKzExMyw0NyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVl
KCkKICAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxlbWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0
cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgZm9ybS4KICAgICAvLyBPdGhlcndp
c2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0n
cyBsaXN0IG9mIGVsZW1lbnRzLgogICAgIGlmIChtX2Zvcm0gJiYgZmluZFJvb3QoZWxlbWVudCkg
IT0gZmluZFJvb3QobV9mb3JtKSkKLSAgICAgICAgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICAgICAg
c2V0Rm9ybSgwKTsKIH0KIAotdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZUZyb21G
b3JtKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRGb3JtKEhUTUxGb3JtRWxlbWVu
dCogbmV3Rm9ybSkKIHsKKyAgICBpZiAobV9mb3JtID09IG5ld0Zvcm0pCisgICAgICAgIHJldHVy
bjsKKyAgICB3aWxsQ2hhbmdlRm9ybSgpOworICAgIG1fZm9ybSA9IG5ld0Zvcm07CisgICAgZGlk
Q2hhbmdlRm9ybSgpOworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbENoYW5n
ZUZvcm0oKQoreworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVs
ZW1lbnQodGhpcyk7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRDaGFuZ2VG
b3JtKCkKK3sKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVs
ZW1lbnQodGhpcyk7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsRGVzdHJv
eUZvcm0oKQoreworICAgIEFTU0VSVChtX2Zvcm0pOwogICAgIGlmICghbV9mb3JtKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICB3aWxs
QmVVbmFzc29jaWF0ZWRGcm9tRGVzdHJveWluZ0Zvcm0oKTsKICAgICBtX2Zvcm0gPSAwOworICAg
IHdhc1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpOworfQorCit2b2lkIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6d2lsbEJlVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKCkKK3sK
K30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Ondhc1VuYXNzb2NpYXRlZEZyb21EZXN0
cm95aW5nRm9ybSgpCit7CisgICAgQVNTRVJUKCFtX2Zvcm0pOwogfQogCiB2b2lkIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIoKQpAQCAtMTM1LDkgKzE2Myw4IEBAIHZvaWQg
Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcigpCiAgICAgaWYgKG1fZm9ybSkg
ewogICAgICAgICBpZiAoZm9ybUlkLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogICAgIH0KLSAgICBtX2Zvcm0g
PSAwOworICAgIEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSA9IDA7CiAgICAgaWYgKCFmb3JtSWQu
aXNOdWxsKCkgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIFRoZSBIVE1M
NSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAg
ICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElE
IHRoYXQgZXF1YWwgdG8KQEAgLTE0NSwxMSArMTcyLDEwIEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpyZXNldEZvcm1Pd25lcigpCiAgICAgICAgIC8vIHRyZWVTY29wZSgpLT5nZXRFbGVt
ZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCiAgICAgICAgIEVsZW1lbnQqIGZpcnN0
RWxlbWVudCA9IGVsZW1lbnQtPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwog
ICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkKLSAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+
KGZpcnN0RWxlbWVudCk7CisgICAgICAgICAgICBuZXdGb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1FbGVtZW50Kj4oZmlyc3RFbGVtZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9mb3JtID0g
ZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1f
Zm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgbmV3Rm9ybSA9IGVsZW1l
bnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICBzZXRGb3JtKG5ld0Zvcm0pOwogfQogCiB2b2lk
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQpAQCAtMTU3LDEx
ICsxODMsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5n
ZWQoKQogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAg
ICBpZiAoIWVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CiAgICAgICAgIC8v
IFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIg
aGVyZS4KLSAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9y
bUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0
b3IoKTsKLSAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgIGZvcm0oKS0+cmVnaXN0ZXJG
b3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgc2V0Rm9ybShlbGVtZW50LT5maW5kRm9ybUFuY2Vz
dG9yKCkpOwogICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzZXRGb3Jt
T3duZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCmlu
ZGV4IDFhOGUxNjU3ZWZmM2Y5YTVkY2U1YmVmYzgzNWJjM2I5NmQ1ODkzNDQuLjYxNTMxYTA1Njli
ZDJjNThlMTQ2Mzc4ZWMyZjZiNjBlYTJiMTQzNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuaApAQCAtNTMsMTIgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAv
LyBSZXR1cm4gdHJ1ZSBmb3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNlZSBIVE1MNC0xNy4xMy4y
KS4KICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBt
X2Zvcm0gPSAwOyB9CisgICAgdm9pZCB3aWxsRGVzdHJveUZvcm0oKTsKIAogICAgIHZvaWQgcmVz
ZXRGb3JtT3duZXIoKTsKIAogcHJvdGVjdGVkOgotICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChI
VE1MRm9ybUVsZW1lbnQqKTsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKIAogICAgIHZv
aWQgaW5zZXJ0ZWRJbnRvVHJlZSgpOwogICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CkBAIC02
NiwxMCArNjYsMTQgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwogICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KTsK
IAotICAgIHZvaWQgc2V0Rm9ybShIVE1MRm9ybUVsZW1lbnQqIGZvcm0pIHsgbV9mb3JtID0gZm9y
bTsgfQotICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICB2b2lkIHNldEZvcm0oSFRNTEZv
cm1FbGVtZW50Kik7CiAgICAgdm9pZCBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOwogCisgICAgdmly
dHVhbCB2b2lkIHdpbGxDaGFuZ2VGb3JtKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUZv
cm0oKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdG
b3JtKCk7CisgICAgdmlydHVhbCB2b2lkIHdhc1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9y
bSgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29u
dHJvbE5hbWUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDhmZTQ1MDRhZTY5ZWExZjViNjZiZjU4OTE2ZDRiZmQw
Yzk1Yjc5NzIuLjM0NDliYWQwYzg4MzA2NzNiZTJiZjVhNGE4OTBmMjc5YzY0MmUxNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNTAs
NyArNTAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoZm9ybSkK
ICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQogICAgICwg
bV9yZXF1aXJlZChmYWxzZSkKQEAgLTYxLDE4ICs2MCwxMiBAQCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvYwogICAgICwgbV93YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChm
YWxzZSkKICAgICAsIG1faGFzQXV0b2ZvY3VzZWQoZmFsc2UpCiB7Ci0gICAgaWYgKCF0aGlzLT5m
b3JtKCkpCi0gICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKLSAgICBpZiAodGhp
cy0+Zm9ybSgpKQotICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7Ci0KKyAgICBzZXRGb3JtKGZvcm0gPyBmb3JtIDogZmluZEZvcm1BbmNlc3RvcigpKTsKICAg
ICBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpOwogfQogCiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCiB7Ci0gICAgaWYgKGZvcm0oKSkK
LSAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAogdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQpAQCAtMTA4LDExICsxMDEsOSBAQCBib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKCkgY29uc3QKIAogdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikgeworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gZm9ybUF0dHIpCiAgICAgICAgIGZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCk7Ci0gICAg
ICAgIGlmICghZm9ybSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0
dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBk
aXNhYmxlZEF0dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRy
KSB7CiAgICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rp
c2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwogICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9k
aXNhYmxlZCkgewpAQCAtMjA1LDkgKzE5Niw2IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQogdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIHsKICAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKLSAgICBpZiAoIWZvcm0o
KSkKLSAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0
aGlzKTsKLQogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggZGFiNDdlZmZmMWNmNjdm
MDFmM2JiNDU4MmZjMzA4ZmMwYmUwMjhjNi4uNjdiMjRlNjllMWVjNDAxZTkwYmIyMTY3NDRiNDg0
MWQ1YzliNjliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAt
OTgsNyArOTgsNyBAQCBIVE1MRm9ybUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQoKQogICAgICAg
ICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0
aGlzKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmZvcm1EZXN0
cm95ZWQoKTsKKyAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPndpbGxEZXN0cm95Rm9y
bSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltYWdlRWxlbWVudHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIG1faW1hZ2VFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKIH0KQEAgLTQ1
OSwxOCArNDU5LDExIEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRl
eChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtCiAKIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsK
LSAgICBpZiAoZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KGUpOwotICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3Zl
QnV0dG9uKGVsZW1lbnQpOwotICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9u
KGVsZW1lbnQpOwotICAgIH0KICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVs
ZW1lbnRJbmRleChlKSwgZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3Jt
RWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKGUtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCi0gICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0
b24oc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpKTsKICAgICB1bnNpZ25l
ZCBpbmRleDsKICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2lu
ZGV4XSA9PSBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXgg
NDZkMTA0OWJkZWI5OWY2N2RkM2M3ZjY2MTE0ZTVkZWEzMmNhMDliZC4uYzYzMzBlNWZjYjAxZWY4
ZDliMDY4ZmI2ODM4Njk5ODc5YzJkMmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCkBAIC0xMTUsMTIgKzExNSw2IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1M
SW5wdXRFbGVtZW50KCkKIHsKICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKICAg
ICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFj
a3ModGhpcyk7Ci0KLSAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3Zl
QnV0dG9uKHRoaXMpOwotCi0gICAgLy8gTmVlZCB0byByZW1vdmUgdGhpcyBmcm9tIHRoZSBmb3Jt
IHdoaWxlIGl0IGlzIHN0aWxsIGFuIEhUTUxJbnB1dEVsZW1lbnQsCi0gICAgLy8gc28gY2FuJ3Qg
d2FpdCBmb3IgdGhlIGJhc2UgY2xhc3MncyBkZXN0cnVjdG9yIHRvIGRvIGl0LgotICAgIHJlbW92
ZUZyb21Gb3JtKCk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6
Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKQEAgLTE3OSw4ICsxNzMsNyBAQCBib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OnNob3VsZEF1dG9jb21wbGV0ZSgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6dXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpCiB7Ci0gICAgaWYgKGF0dGFjaGVkKCkg
JiYgY2hlY2tlZCgpKQotICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRo
aXMpOworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBp
ZiAoZm9ybSgpKSB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
PiYgY29udHJvbHMgPSBmb3JtKCktPmFzc29jaWF0ZWRFbGVtZW50cygpOwpAQCAtMTUwMiw2ICsx
NDk1LDQ0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFn
ZUNhY2hlKCkKICAgICByZXNldCgpOwogfQogCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxD
aGFuZ2VGb3JtKCkKK3sKKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRo
aXMpOworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsQ2hhbmdlRm9ybSgpOwor
fQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZENoYW5nZUZvcm0oKQoreworICAgIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaWRDaGFuZ2VGb3JtKCk7CisgICAgY2hlY2tlZFJhZGlv
QnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp3
aWxsQmVVbmFzc29jaWF0ZWRGcm9tRGVzdHJveWluZ0Zvcm0oKQoreworICAgIGNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OndpbGxCZVVuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpOworfQorCit2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6Ondhc1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpCit7
CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Ondhc1VuYXNzb2NpYXRlZEZyb21EZXN0
cm95aW5nRm9ybSgpOworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7
Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQorewor
ICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwor
ICAgIEFTU0VSVChpbkRvY3VtZW50KCkpOworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRC
dXR0b24odGhpcyk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpCit7CisgICAgQVNTRVJUKGluRG9jdW1lbnQoKSk7CisgICAgY2hlY2tlZFJhZGlvQnV0
dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOworfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRp
ZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkKIHsKICAgICBtX2lucHV0
VHlwZS0+d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmgKaW5kZXggMDU0NDM2ZGQ0Njc2MDJjM2UxMTk5ZmU2OGJmOTRmMzA1MWIy
NmUzZS4uMTAyNWViMjM3ZTY4ODc0MGY4YzE1MTM3MWEzZTNjYzM4ZWE4NDE1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTI0OSw2ICsyNDksMTIgQEAgcHJpdmF0
ZToKICAgICBlbnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmluaXRpYWxpemVkLCBPbiwgT2Zm
IH07CiAgICAgZW51bSBBbnlTdGVwSGFuZGxpbmcgeyBSZWplY3RBbnksIEFueUlzRGVmYXVsdFN0
ZXAgfTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlRm9ybSgpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VGb3JtKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxCZVVuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCB3YXNVbmFzc29jaWF0ZWRGcm9tRGVzdHJveWluZ0Zvcm0oKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCop
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCBl
OWJjMzZjMjQ0YWFiYWI1NjM5ODIwZDc2MDI3ODNlOTkwZTNhZWRkLi4zZjlmNzdmYjI4NzE0OWNj
YmZlZGZkYzZlMDMwN2FiYTVmNzgwNTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcApAQCAtNTUsMjEgKzU1LDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIGlubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1l
bnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKICAgICA6IEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlciwgU2hvdWxkTm90UHJlZmVy
UGx1Z0luc0ZvckltYWdlcykKLSAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChmb3JtKQogICAg
ICwgbV9kb2NOYW1lZEl0ZW0odHJ1ZSkKICAgICAsIG1fdXNlRmFsbGJhY2tDb250ZW50KGZhbHNl
KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKG9iamVjdFRhZykpOwotICAgIGlmICghdGhpcy0+
Zm9ybSgpKQotICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7Ci0gICAgaWYgKHRo
aXMtPmZvcm0oKSkKLSAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRo
aXMpOworICAgIHNldEZvcm0oZm9ybSA/IGZvcm0gOiBmaW5kRm9ybUFuY2VzdG9yKCkpOwogfQog
CiBpbmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7Ci0gICAg
aWYgKGZvcm0oKSkKLSAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0K
IAogUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxG
b3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTA4YjJlOTgy
NzBiNTFmMzFjNjUwMjkzNWIwMzU1NTU4NmJlOTc0OS4uMGFmMWJhOTA5NjU4MTE5NzEwOTM4MWVi
MWYxNDVlM2MzNmMwMjI4NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBEb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1z
L3JhZGlvL3JhZGlvLWdyb3VwLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9yYWRpby9yYWRpby1ncm91cC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0wNCAgRGF2aWQg
TGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBGaWxlU3lz
dGVtIGJyaWRnZSBuZWVkcyB0aHJlYWRzYWZlIGZpeGVzIGFuZCBvdGhlciBjbGVhbi11cC4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91cC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGIwYjNjNTU0MDU4Yzg5MTI1ZjI0OTAxOWQ5MWZhZWFlYmM5OTdj
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8t
Z3JvdXAtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1ZhcmlvdXMgdGVzdHMgYWJvdXQg
cmFkaW8gYnV0dG9uIGdyb3VwLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2hh
bmdpbmcgdGhlIG5hbWUgYXR0cmlidXRlIG9mIGEgcmFkaW8gYnV0dG9uOgorUEFTUyAkKCJyYWRp
bzEtMSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJyYWRpbzEtMiIpLmNoZWNrZWQgaXMgdHJ1
ZQorUEFTUyAkKCJyYWRpbzEtMSIpLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgJCgicmFkaW8xLTIi
KS5jaGVja2VkIGlzIHRydWUKKworQ2hhbmdpbmcgdGhlIHR5cGUgb2YgYW4gaW5wdXQgZWxlbWVu
dCB0byByYWRpbzoKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgi
cmFkaW8xLTEiKS5jaGVja2VkIGlzIGZhbHNlCitQQVNTICQoInRleHQxLTIiKS5jaGVja2VkIGlz
IHRydWUKKworTW92aW5nIGEgY2hlY2tlZCByYWRpbyBidXR0b24gdG8gYW5vdGhlciBmb3JtOgor
UEFTUyAkKCJvdXRzaWRlIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoImluc2lkZSIpLmNoZWNr
ZWQgaXMgdHJ1ZQorUEFTUyAkKCJpbnNpZGUyIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoIm91
dHNpZGUiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgiaW5zaWRlIikuY2hlY2tlZCBpcyBmYWxz
ZQorUEFTUyAkKCJpbnNpZGUyIikuY2hlY2tlZCBpcyB0cnVlCitXaGVuIGEgcmFkaW8gaW4gYSBm
b3JtIGlzIHJlbW92ZWQsIGl0IHNob3VsZCBub3QgYWZmZWN0IERvY3VtZW50LWxldmVsIGdyb3Vw
czoKK1BBU1MgJCgib3V0c2lkZSIpLmNoZWNrZWQgaXMgdHJ1ZQorCitSZW1vdmluZyBhbiBhbmNl
c3RvciBvd25lciBmb3JtOgorUEFTUyAkKCJyYWRpbzAtMSIpLmNoZWNrZWQgaXMgdHJ1ZQorCitD
aGFuZ2luZyBmb3JtIGF0dHJpYnV0ZQorUEFTUyAkKCJyYWRpbzEtMSIpLmNoZWNrZWQgaXMgdHJ1
ZQorUEFTUyAkKCJyYWRpbzEtMiIpLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgJCgicmFkaW8xLTMi
KS5jaGVja2VkIGlzIHRydWUKK1JlbW92aW5nIGEgbm9uLWFuY2VzdG9yIG93bmVyIGZvcm06CitQ
QVNTICQoInJhZGlvMS0zIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoInJhZGlvMS00IikuY2hl
Y2tlZCBpcyB0cnVlCisoVGhlIGZvbGxvd2luZyB0ZXN0IGRlcGVuZHMgb24gZ2MoKS4gSXQgbWln
aHQgZmFpbCBvbiBhIHJlYWwgYnJvd3Nlci4pCitQQVNTICQoInJhZGlvMS0xIikuY2hlY2tlZCBp
cyBmYWxzZQorUEFTUyAkKCJyYWRpbzEtMyIpLmNoZWNrZWQgaXMgdHJ1ZQorCitBZGRpbmcgYSBy
YWRpbyBidXR0b24gdG8gYW4gb3JwaGFuIHRyZWU6CitQQVNTIG9ycGhhbkRpdi5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkIGlzIHRydWUKK1BBU1Mgb3JwaGFuRGl2Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzFdLmNoZWNrZWQgaXMgdHJ1ZQorQWRkaW5nIHRo
ZSBvcnBoYW4gdHJlZSB0byBhIGRvY3VtZW50OgorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImlucHV0IilbMF0uY2hlY2tlZCBpcyBmYWxzZQorUEFTUyBvcnBoYW5EaXYuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMV0uY2hlY2tlZCBpcyB0cnVlCitQYXJzaW5nIGFu
IG9ycGhhbiBmb3JtOgorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0
IilbMF0uY2hlY2tlZCBpcyB0cnVlCitQQVNTIG9ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiaW5wdXQiKVsxXS5jaGVja2VkIGlzIHRydWUKKworTW92aW5nIGEgcmFkaW8gYnV0dG9uIHRv
IGFub3RoZXIgRG9jdW1lbnQ6CitQQVNTIGRvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTIiKS5j
aGVja2VkIGlzIGZhbHNlCitQQVNTIGRvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVj
a2VkIGlzIHRydWUKK1BBU1MgZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIpLmNoZWNrZWQg
aXMgdHJ1ZQorCitDbG9uaW5nIGEgcmFkaW8gYnV0dG9uOgorUEFTUyBvcmlnaW5hbC5jaGVja2Vk
IGlzIHRydWUKK1BBU1MgY2xvbmVkUmFkaW8uY2hlY2tlZCBpcyB0cnVlCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWM4MDBhYWM2MDhm
YzVjNThjZjU4NThlMjQxYjFhMTQyMGM0NTMwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAuaHRtbApAQCAtMCwwICsxLDE0NSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJwYXJlbnQiPjwvZGl2PgorCis8
c2NyaXB0PgorZGVzY3JpcHRpb24oJ1ZhcmlvdXMgdGVzdHMgYWJvdXQgcmFkaW8gYnV0dG9uIGdy
b3VwLicpOworCitjb25zdCBDaGVja2VkID0gdHJ1ZTsKK2NvbnN0IFVuY2hlY2tlZCA9IGZhbHNl
OworCitmdW5jdGlvbiBjcmVhdGVSYWRpbyhuYW1lLCBjaGVja2VkLCBpZCkgeworICAgIHZhciBp
bnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgaW5wdXQudHlwZSA9
ICdyYWRpbyc7CisgICAgaW5wdXQubmFtZSA9IG5hbWU7CisgICAgaW5wdXQuY2hlY2tlZCA9ICEh
Y2hlY2tlZDsKKyAgICBpbnB1dC5pZCA9IGlkOworICAgIHJldHVybiBpbnB1dDsKK30KKworZnVu
Y3Rpb24gJChpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cit9
CisKK3ZhciBwYXJlbnQgPSAkKCdwYXJlbnQnKTsKKworZGVidWcoJ0NoYW5naW5nIHRoZSBuYW1l
IGF0dHJpYnV0ZSBvZiBhIHJhZGlvIGJ1dHRvbjonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGZv
cm0+JyArCisgICAgJzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1yYWRp
bzEtMT4nICsKKyAgICAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMiBjaGVja2VkIGlkPXJh
ZGlvMS0yPicgKworICAgICc8L2Zvcm0+JzsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTEiKS5j
aGVja2VkJyk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS0yIikuY2hlY2tlZCcpOworJCgncmFk
aW8xLTInKS5uYW1lID0gJ25hbWUxJzsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hl
Y2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMiIpLmNoZWNrZWQnKTsKKworZGVidWco
JycpOworZGVidWcoJ0NoYW5naW5nIHRoZSB0eXBlIG9mIGFuIGlucHV0IGVsZW1lbnQgdG8gcmFk
aW86Jyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxmb3JtPicgKworICAgICc8aW5wdXQgdHlwZT1y
YWRpbyBuYW1lPW5hbWUxIGNoZWNrZWQgaWQ9cmFkaW8xLTE+JyArCisgICAgJzxpbnB1dCB0eXBl
PXRleHQgbmFtZT1uYW1lMSBjaGVja2VkIGlkPXRleHQxLTI+JyArCisgICAgJzwvZm9ybT4nOwor
c2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMSIpLmNoZWNrZWQnKTsKKyQoJ3RleHQxLTInKS50eXBl
ID0gJ3JhZGlvJzsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hlY2tlZCcpOworc2hv
dWxkQmVUcnVlKCckKCJ0ZXh0MS0yIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
TW92aW5nIGEgY2hlY2tlZCByYWRpbyBidXR0b24gdG8gYW5vdGhlciBmb3JtOicpOworcGFyZW50
LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlk
PSJvdXRzaWRlIj4nICsKKyAgICAnPGZvcm0gaWQ9ImZvcm0xIj4nICsKKyAgICAnPGlucHV0IHR5
cGU9InJhZGlvIiBuYW1lPSJuYW1lMSIgY2hlY2tlZCBpZD0iaW5zaWRlIj4nICsKKyAgICAnPC9m
b3JtPicgKworICAgICc8Zm9ybSBpZD0iZm9ybTIiPicgKworICAgICc8aW5wdXQgdHlwZT0icmFk
aW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlkPSJpbnNpZGUyIj4nICsKKyAgICAnPC9mb3JtPicK
K3Nob3VsZEJlVHJ1ZSgnJCgib3V0c2lkZSIpLmNoZWNrZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgi
aW5zaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcp
OworJCgnZm9ybTEnKS5hcHBlbmRDaGlsZCgkKCdpbnNpZGUyJykpOworc2hvdWxkQmVUcnVlKCck
KCJvdXRzaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVGYWxzZSgnJCgiaW5zaWRlIikuY2hlY2tl
ZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcpOworZGVidWcoJ1doZW4g
YSByYWRpbyBpbiBhIGZvcm0gaXMgcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBhZmZlY3QgRG9jdW1l
bnQtbGV2ZWwgZ3JvdXBzOicpOworcGFyZW50LnJlbW92ZUNoaWxkKCQoJ2Zvcm0xJykpOworc2hv
dWxkQmVUcnVlKCckKCJvdXRzaWRlIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
UmVtb3ZpbmcgYW4gYW5jZXN0b3Igb3duZXIgZm9ybTonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAn
PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMCBjaGVja2VkIGlkPXJhZGlvMC0xPicgKworICAg
ICc8Zm9ybSBpZD1mb3JtMT48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUwIGNoZWNrZWQgaWQ9
cmFkaW8wLTI+PC9mb3JtPic7CitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEnKSk7CitnYygp
Oworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzAtMSIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOwor
ZGVidWcoJ0NoYW5naW5nIGZvcm0gYXR0cmlidXRlJyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxp
bnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1yYWRpbzEtMT4nICsKKyAgICAn
PGZvcm0gaWQ9Zm9ybTE+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVja2VkIGlkPXJh
ZGlvMS0yPjwvZm9ybT4nICsKKyAgICAnPGZvcm0gaWQ9Zm9ybTI+PGlucHV0IHR5cGU9cmFkaW8g
bmFtZT1uYW1lMSBjaGVja2VkIGlkPXJhZGlvMS0zPjwvZm9ybT4nOworJCgncmFkaW8xLTMnKS5z
ZXRBdHRyaWJ1dGUoJ2Zvcm0nLCAnZm9ybTEnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTEi
KS5jaGVja2VkJyk7CitzaG91bGRCZUZhbHNlKCckKCJyYWRpbzEtMiIpLmNoZWNrZWQnKTsKK3No
b3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTMiKS5jaGVja2VkJyk7CisKK2RlYnVnKCdSZW1vdmluZyBh
IG5vbi1hbmNlc3RvciBvd25lciBmb3JtOicpOworJCgnZm9ybTInKS5hcHBlbmRDaGlsZChjcmVh
dGVSYWRpbygnbmFtZTEnLCBDaGVja2VkLCAncmFkaW8xLTQnKSk7CitzaG91bGRCZVRydWUoJyQo
InJhZGlvMS0zIikuY2hlY2tlZCcpOworLy8gSWYgdGhlcmUgaXMgbm8gZWxlbWVudHMgd2l0aCBJ
RCBzcGVjaWZpZWQgYnkgZm9ybT0gYXR0cmlidXRlLCB0aGUgZm9ybQorLy8gY29udHJvbCBpcyBu
b3QgYXNzb2NpYXRlZCB0byBhbnkgZm9ybXMuCitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEn
KSk7CisvLyBGSVhNRTogV2UgbmVlZCB0byBjYWxsIGdjKCkgdHdpY2Ugb24gQXBwbGUgTWFjLgor
Z2MoKTsKK2djKCk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS00IikuY2hlY2tlZCcpOworZGVi
dWcoJyhUaGUgZm9sbG93aW5nIHRlc3QgZGVwZW5kcyBvbiBnYygpLiBJdCBtaWdodCBmYWlsIG9u
IGEgcmVhbCBicm93c2VyLiknKTsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hlY2tl
ZCcpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMyIpLmNoZWNrZWQnKTsKKworZGVidWcoJycp
OworZGVidWcoJ0FkZGluZyBhIHJhZGlvIGJ1dHRvbiB0byBhbiBvcnBoYW4gdHJlZTonKTsKK3Zh
ciBvcnBoYW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK29ycGhhbkRpdi5h
cHBlbmRDaGlsZChjcmVhdGVSYWRpbygnbmFtZTInLCBDaGVja2VkLCAnJykpOworb3JwaGFuRGl2
LmFwcGVuZENoaWxkKGNyZWF0ZVJhZGlvKCduYW1lMicsIENoZWNrZWQsICcnKSk7CitzaG91bGRC
ZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2Vk
Jyk7CitzaG91bGRCZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQi
KVsxXS5jaGVja2VkJyk7CitkZWJ1ZygnQWRkaW5nIHRoZSBvcnBoYW4gdHJlZSB0byBhIGRvY3Vt
ZW50OicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvcnBoYW5EaXYpOworc2hvdWxkQmVG
YWxzZSgnb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLmNoZWNrZWQn
KTsKK3Nob3VsZEJlVHJ1ZSgnb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIp
WzFdLmNoZWNrZWQnKTsKKworZGVidWcoJ1BhcnNpbmcgYW4gb3JwaGFuIGZvcm06Jyk7Citkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKG9ycGhhbkRpdik7CitvcnBoYW5EaXYuaW5uZXJIVE1MID0g
Jzxmb3JtPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTMgY2hlY2tlZD48aW5wdXQgdHlwZT1y
YWRpbyBuYW1lPW5hbWUzIGNoZWNrZWQ+PC9mb3JtPic7CitzaG91bGRCZVRydWUoJ29ycGhhbkRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkJyk7CitzaG91bGRCZVRy
dWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkJyk7
CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdNb3ZpbmcgYSByYWRpbyBidXR0b24gdG8gYW5vdGhlciBE
b2N1bWVudDonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1u
YW1lNCBjaGVja2VkIGlkPXJhZGlvNC0xPic7Cit2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50
YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7Citkb2MuYm9keS5pbm5lckhUTUwgPSAnPGlucHV0
IHR5cGU9cmFkaW8gbmFtZT1uYW1lNCBjaGVja2VkIGlkPXJhZGlvNC0yPic7Citkb2MuYm9keS5h
cHBlbmRDaGlsZChkb2MuYWRvcHROb2RlKCQoJ3JhZGlvNC0xJykpKTsKK3Nob3VsZEJlRmFsc2Uo
J2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTIiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUo
J2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVja2VkJyk7CitwYXJlbnQuYXBwZW5k
Q2hpbGQoY3JlYXRlUmFkaW8oJ25hbWU0JywgQ2hlY2tlZCwgJycpKTsKK3Nob3VsZEJlVHJ1ZSgn
ZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOwor
ZGVidWcoJ0Nsb25pbmcgYSByYWRpbyBidXR0b246Jyk7Cit2YXIgb3JpZ2luYWwgPSBjcmVhdGVS
YWRpbygnbmFtZTUnLCBDaGVja2VkLCAnJyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJyc7CitwYXJl
bnQuYXBwZW5kQ2hpbGQob3JpZ2luYWwpOwordmFyIGNsb25lZFJhZGlvID0gb3JpZ2luYWwuY2xv
bmVOb2RlKHRydWUpOworc2hvdWxkQmVUcnVlKCdvcmlnaW5hbC5jaGVja2VkJyk7CitzaG91bGRC
ZVRydWUoJ2Nsb25lZFJhZGlvLmNoZWNrZWQnKTsKKworcGFyZW50LmlubmVySFRNTCA9ICcnOwor
ZGVidWcoJycpOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121272</attachid>
            <date>2012-01-05 06:32:18 -0800</date>
            <delta_ts>2012-01-09 21:51:23 -0800</delta_ts>
            <desc>Patch by tkent 4</desc>
            <filename>bug-45719-20120105233216.patch</filename>
            <type>text/plain</type>
            <size>33784</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JkNGQwNDRmODc3YjYy
Mzk3OGU1MWMzNWY3N2EzNDNiM2E3MWY1OC4uYjMxYjU2MjcyZDcyY2QwNzAwNGM2MDhhM2ZhNmUy
ZDFkMTgxNzliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEyLTAxLTA1ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBkb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgcGVyIHRoZSBz
dGFuZGFyZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvcnMsIHdlIHNob3VsZCBub3QgYWRkIGEK
KyAgICAgICAgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGRvY3VtZW50IHRvIGEgcmFkaW8gYnV0dG9u
IGdyb3VwLgorCisgICAgICAgIFNvLCBDaGVja2VkUmFkaW9CdXR0b24gbWVtYmVyIGZ1bmN0aW9u
cyBzaG91bGQgYmUgY2FsbGVkIGluCisgICAgICAgIGluc2VydGVkSW50b0RvY3VtZW50KCkgYW5k
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKSwgYW5kIHRoZXkgc2hvdWxkIGRvCisgICAgICAgIG5vdGhp
bmcgaWYgdGhlIHNwZWNpZmllZCByYWRpbyBidXR0b24gaXMgbm90IGluIGEgZG9jdW1lbnQuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBhIGJ1ZyB0aGF0IGZvcm0gb3duZXIgY2hh
bmdlIGJ5ICdmb3JtJyBhdHRyaWJ1dGUKKyAgICAgICAgZGlkbid0IHVwZGF0ZSByYWRpbyBidXR0
b24gZ3JvdXBzIGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3JhZGlvL3Jh
ZGlvLWdyb3VwLmh0bWwKKworICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNob3VsZE1ha2VSYWRpb0dyb3VwKTogQSBoZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgPGlucHV0PiBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRp
b0J1dHRvbnM6OmFkZEJ1dHRvbik6CisgICAgICAgIC0gQ2hhbmdlIHRoZSBhcmd1bWVudCB0eXBl
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAg
LSBVc2Ugc2hvdWxkTWFrZVJhZGlvR3JvdXAoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6IGRpdHRvLgorICAgICAgICAqIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmg6CisgICAgICAgICBDaGFuZ2UgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIGFk
ZEJ1dHRvbigpIGFuZCByZW1vdmVCdXR0b24oKToKKyAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIC0+IEhUTUxJbnB1dEVsZW1lbnQqLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgIERvIG5vdCB1cGRhdGUgbV9mb3JtIGV4Y2VwdCBpbiBz
ZXRGb3JtKCkgYW5kIGZvcm1EZXN0b3J5ZWQoKS4KKyAgICAgICAgIFRoaXMgaGVscHMgdXMgdG8g
Y2FsbCByZWdpc3RlckZvcm1FbGVtZW50KCkgYW5kIHJlbW92ZUZyb21FbGVtZW50KCkKKyAgICAg
ICAgIGNvcnJlY3RseSwgYW5kIGNhbGwgd2lsbENoYW5nZUZvcm0oKS9kaWRDaGFuZ2VGb3JtKCkg
aG9va3MgY29ycmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsQ2hhbmdlRm9ybSk6CisgICAgICAgIFRoaXMgdmly
dHVhbCBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvd25lciBmb3JtIGlzIHVkcGF0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRpZENoYW5nZUZvcm0p
OgorICAgICAgICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBvd25l
ciBmb3JtIHdhcyB1ZHBhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojp3aWxsRGVzdHJveUZvcm0pOgorICAgICAgICAtIFJlbmFtYWVkIGZyb20gZm9ybURlc3Rv
cnllZCgpCisgICAgICAgIC0gQWRkIGNhbGxzIHRvIHdpbGxCZVVuYXNzb2NpYXRlZEZyb21EZXN0
cm95aW5nRm9ybSgpIGFuZCB3YXNVbmFzc29jaWF0ZWRGcm9tRGVzdHJveWluZ0Zvcm0oKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbEJlVW5hc3NvY2lhdGVk
RnJvbURlc3Ryb3lpbmdGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6d2FzVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIpOiBVc2Ugc2V0Rm9ybSgp
LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRl
Q2hhbmdlZCk6IGRpdHRvLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOiBV
c2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICByZW1vdmVGb3JtRWxlbWVudCgpIGlz
IG5vdCBuZWVkZWQuIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSB0cmVhdHMgaXQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIE5vIG5lZWQgdG8gaGFuZGxlIENoZWNrZWRSYWRpb0J1dHRvbnMgaGVyZS4gSXQg
aXMgaGFuZGxlZCBieSBIVE1MSW5wdXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6IGRpdHRvLgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6fkhUTUxGb3JtRWxlbWVudCk6CisgICAgICAgICBSZW5hbWUgZm9ybURlc3Ryb3llZCgpIHdp
dGggd2lsbERlc3Ryb3lGb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6
OnJlZ2lzdGVyRm9ybUVsZW1lbnQpOgorICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBy
YWRpbyBidXR0b24gZ3JvdXBzIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OnJlbW92ZUZvcm1FbGVtZW50KTogZGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5w
dXRFbGVtZW50KToKKyAgICAgICAgQmVjYXVzZSByZW1vdmVkRnJvbURvY3VtZW50KCkgdW5yZWdp
c3RlcnMgdGhlIHJhZGlvIGJ1dHRvbiBmcm9tIGEgZ3JvdXAsCisgICAgICAgIHdlIG5lZWQgdG8g
ZG8gbm90aGluZyBoZXJlLiBFdmVuIGlmIHRoZSByYWRpbyBidXR0b24gaXMgZGVzdHJ1Y3RlZCB3
aXRoCisgICAgICAgIHRoZSBvd25lciBEb2N1bWVudCwgd2UgZG9uJ3QgbmVlZCB0byBjbGVhbiBk
b2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKToKKyAgICAgICAgQ2hlY2tp
bmcgYXR0YWNoZWQoKSB3YXMgd3JvbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50Ojp3aWxsQ2hhbmdlRm9ybSk6CisgICAgICAgIFJlbW92ZSB0aGlzIHJhZGlvIGJ1dHRvbiBm
cm9tIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0aGUgb2xkIGZvcm0uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkaWRDaGFuZ2VGb3JtKToKKyAgICAgICAgQWRkIHRoaXMg
cmFkaW8gYnV0dG9uIHRvIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0aGUgbmV3IGZvcm0uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsQmVVbmFzc29jaWF0ZWRGcm9t
RGVzdHJveWluZ0Zvcm0pOgorICAgICAgICBSZW1vdmUgdGhpcyByYWRpbyBidXR0b24gZnJvbSBh
IHJhZGlvIGJ1dHRvbiBncm91cCBmb3IgdGhlIG9sZCBmb3JtLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6d2FzVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKToKKyAg
ICAgICAgQWRkIHRoaXMgcmFkaW8gYnV0dG9uIHRvIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0
aGUgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCk6CisgICAgICAgIEFkZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0
b24oKSBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCk6CisgICAgICAgIEFkZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0
b24oKSBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRv
TmV3RG9jdW1lbnQpOgorICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBDaGVja2VkUmFk
aW9CdXR0b24oKSBoZXJlIGJlY2F1c2UKKyAgICAgICAgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGhh
bmRsZXMgaXQuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0
RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCk6CisgICAgICAgIHJl
bW92ZUZvcm1FbGVtZW50KCkgaXMgbm90IG5lZWRlZC4gfkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgp
IHRyZWF0cyBpdC4KKwogMjAxMi0wMS0wNSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
aGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCAzOGU1ZWZiYmM5MWM2MGNjYjQ1YTU0NjZlNWZi
NGIyOWMwNzQxYWUwLi41YTdlNWM5NWNjOTlkMjYwNDRhY2M0ODBkNjk5MTM4ZGY1ODBiY2Q5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCkBAIC0yNSwzNCAr
MjUsMzIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENoZWNrZWRSYWRpb0J1dHRv
bnM6OmFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIGlu
bGluZSBib29sIHNob3VsZE1ha2VSYWRpb0dyb3VwKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCByYWRpbyBidXR0b25zLgotICAgIGlmICgh
ZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIGVs
ZW1lbnQtPmlzUmFkaW9CdXR0b24oKSAmJiAhZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSAmJiBl
bGVtZW50LT5pbkRvY3VtZW50KCk7Cit9CiAKLSAgICAvLyBXaXRob3V0IGEgbmFtZSwgdGhlcmUg
aXMgbm8gZ3JvdXAuCi0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCit2b2lkIENo
ZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQor
eworICAgIGlmICghc2hvdWxkTWFrZVJhZGlvR3JvdXAoZWxlbWVudCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKLQogICAgIC8vIFdlIG9ubHkgdHJhY2sgY2hlY2tl
ZCBidXR0b25zLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5jaGVja2VkKCkpCisgICAgaWYgKCFl
bGVtZW50LT5jaGVja2VkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9uYW1lVG9D
aGVja2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9u
TWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0lucHV0TWFwKTsKIAotICAgIHBhaXI8TmFtZVRvSW5w
dXRNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRv
bk1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIGlucHV0RWxlbWVudCk7CisgICAgcGFp
cjxOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbmFtZVRvQ2hlY2tl
ZFJhZGlvQnV0dG9uTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgZWxlbWVudCk7CiAg
ICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBIVE1MSW5w
dXRFbGVtZW50KiBvbGRDaGVja2VkQnV0dG9uID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7Ci0gICAg
aWYgKG9sZENoZWNrZWRCdXR0b24gPT0gaW5wdXRFbGVtZW50KQorICAgIGlmIChvbGRDaGVja2Vk
QnV0dG9uID09IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlc3VsdC5maXJzdC0+
c2Vjb25kID0gaW5wdXRFbGVtZW50OworICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gZWxlbWVu
dDsKICAgICBvbGRDaGVja2VkQnV0dG9uLT5zZXRDaGVja2VkKGZhbHNlKTsKIH0KIApAQCAtNjYs
OCArNjQsMTAgQEAgSFRNTElucHV0RWxlbWVudCogQ2hlY2tlZFJhZGlvQnV0dG9uczo6Y2hlY2tl
ZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYKICAgICByZXR1cm4gbV9uYW1lVG9D
aGVja2VkUmFkaW9CdXR0b25NYXAtPmdldChuYW1lLmltcGwoKSk7CiB9CiAKLXZvaWQgQ2hlY2tl
ZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1l
bnQpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KQogeworICAgIGlmICghZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQorICAg
ICAgICByZXR1cm47CiAgICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkgfHwgIW1fbmFt
ZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC03Nywx
MCArNzcsNyBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25hbWVUb0NoZWNrZWRS
YWRpb0J1dHRvbk1hcC0+ZW5kKCkgfHwgaXQtPnNlY29uZCAhPSBlbGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVu
dC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGlucHV0RWxlbWVudCwgaW5w
dXRFbGVtZW50KTsKLSAgICBBU1NFUlQoaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2Vk
KCkpOwotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFTU0VSVChl
bGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkpOwogCiAgICAgbV9uYW1lVG9DaGVja2VkUmFk
aW9CdXR0b25NYXAtPnJlbW92ZShpdCk7CiAgICAgaWYgKG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0
dG9uTWFwLT5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMu
aAppbmRleCAwZmE0NTdhY2I0NjJkN2ViZTFhY2M1YTdlOWE5ZjAzY2YzOGU5ZTgxLi45MjViNTA2
NzgyYTQxYzI3ZDE1NDdlZjAxOTlhZDk1ZjViZGEzMjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
aGVja2VkUmFkaW9CdXR0b25zLmgKQEAgLTI3LDEzICsyNywxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW5wdXRF
bGVtZW50OwogCiBjbGFzcyBDaGVja2VkUmFkaW9CdXR0b25zIHsKIHB1YmxpYzoKLSAgICB2b2lk
IGFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVCdXR0
b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxJbnB1
dEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7CiAg
ICAgSFRNTElucHV0RWxlbWVudCogY2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0
cmluZyYgZ3JvdXBOYW1lKSBjb25zdDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAppbmRleCBmZWIxZDBkN2EwNzI1ZDEyNDkxYWIx
MTA4ZmM0YjJjMGUwNWEwZDg5Li5lZmUzMGUwN2Y5ODg3ZTliNmI1NjNiNjg1ODJjYTk0ZDgyMWNm
NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
CkBAIC0zNSwxMyArMzUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1Gb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudChIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCi0gICAgOiBtX2Zvcm0oZm9ybSkKK0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKKyAgICA6IG1fZm9ybSgwKQog
ewogfQogCiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6On5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKQog
eworICAgIHNldEZvcm0oMCk7CiB9CiAKIFZhbGlkaXR5U3RhdGUqIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6dmFsaWRpdHkoKQpAQCAtODAsMTUgKzgxLDEyIEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKCkKICAgICAgICAgLy8gUmVzZXRzIHRoZSBmb3JtIG93
bmVyIGF0IGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgZWxlbWVudCBkb24ndAogICAgICAgICAvLyBh
c3NvY2lhdGUgYW55IGZvcm0gZWxlbWVudHMgd2hlbiB0aGVyZSBpcyBubyBlbGVtZW50IHdoaWNo
IGhhcwogICAgICAgICAvLyB0aGUgZ2l2ZW4gSUQuCi0gICAgICAgIGlmIChtX2Zvcm0pIHsKLSAg
ICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBt
X2Zvcm0gPSAwOwotICAgICAgICB9CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSA9
IDA7CiAgICAgICAgIEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gZWxlbWVudC0+dHJlZVNjb3BlKCkt
PmdldEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKICAg
ICAgICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcp
KSB7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihm
b3JtRWxlbWVudCk7Ci0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CisgICAgICAgICAgICBuZXdGb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4o
Zm9ybUVsZW1lbnQpOwogICAgICAgICB9CisgICAgICAgIHNldEZvcm0obmV3Rm9ybSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX2Zvcm0pIHsKQEAgLTk2LDkgKzk0LDcgQEAg
dm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogICAgICAgICAv
LyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNpZGUgYSBmb3JtLiAgSW4gdGhlIGNhc2Ugb2Yg
dGhlIHBhcnNlcgogICAgICAgICAvLyBzZXR0aW5nIGEgZm9ybSwgd2Ugd2lsbCBhbHJlYWR5IGhh
dmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3JtLAogICAgICAgICAvLyBhbmQgc28gd2UgZG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0gZWxlbWVudC0+ZmluZEZv
cm1BbmNlc3RvcigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgbV9mb3JtLT5y
ZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBzZXRGb3JtKGVsZW1lbnQtPmZpbmRG
b3JtQW5jZXN0b3IoKSk7CiAgICAgfQogfQogCkBAIC0xMTcsMTUgKzExMyw0NyBAQCB2b2lkIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKCkKICAgICAvLyBJZiB0aGUgZm9y
bSBhbmQgZWxlbWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29u
bmVjdGlvbiB0byB0aGUgZm9ybS4KICAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3Jt
IGFuZCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgog
ICAgIGlmIChtX2Zvcm0gJiYgZmluZFJvb3QoZWxlbWVudCkgIT0gZmluZFJvb3QobV9mb3JtKSkK
LSAgICAgICAgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICAgICAgc2V0Rm9ybSgwKTsKIH0KIAotdm9p
ZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKK3ZvaWQgRm9ybUFzc29j
aWF0ZWRFbGVtZW50OjpzZXRGb3JtKEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSkKIHsKKyAgICBp
ZiAobV9mb3JtID09IG5ld0Zvcm0pCisgICAgICAgIHJldHVybjsKKyAgICB3aWxsQ2hhbmdlRm9y
bSgpOworICAgIG1fZm9ybSA9IG5ld0Zvcm07CisgICAgZGlkQ2hhbmdlRm9ybSgpOworfQorCit2
b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbENoYW5nZUZvcm0oKQoreworICAgIGlmICht
X2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Cit9CisKK3Zv
aWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRDaGFuZ2VGb3JtKCkKK3sKKyAgICBpZiAobV9m
b3JtKQorICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Cit9CisKK3Zv
aWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsRGVzdHJveUZvcm0oKQoreworICAgIEFTU0VS
VChtX2Zvcm0pOwogICAgIGlmICghbV9mb3JtKQogICAgICAgICByZXR1cm47Ci0gICAgbV9mb3Jt
LT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICB3aWxsQmVVbmFzc29jaWF0ZWRGcm9tRGVz
dHJveWluZ0Zvcm0oKTsKICAgICBtX2Zvcm0gPSAwOworICAgIHdhc1VuYXNzb2NpYXRlZEZyb21E
ZXN0cm95aW5nRm9ybSgpOworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbEJl
VW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKCkKK3sKK30KKwordm9pZCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6Ondhc1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpCit7CisgICAg
QVNTRVJUKCFtX2Zvcm0pOwogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRG
b3JtT3duZXIoKQpAQCAtMTM1LDkgKzE2Myw4IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpyZXNldEZvcm1Pd25lcigpCiAgICAgaWYgKG1fZm9ybSkgewogICAgICAgICBpZiAoZm9ybUlk
LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZv
cm1FbGVtZW50KHRoaXMpOwogICAgIH0KLSAgICBtX2Zvcm0gPSAwOworICAgIEhUTUxGb3JtRWxl
bWVudCogbmV3Rm9ybSA9IDA7CiAgICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkgJiYgZWxlbWVudC0+
aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUg
ZWxlbWVudCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBmaXJzdCBl
bGVtZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KQEAgLTE0
NSwxMSArMTcyLDEwIEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25l
cigpCiAgICAgICAgIC8vIHRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdp
dmVuIGVsZW1lbnQuCiAgICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGVsZW1lbnQtPnRy
ZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwogICAgICAgICBpZiAoZmlyc3RFbGVt
ZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIG1f
Zm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CisgICAg
ICAgICAgICBuZXdGb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVt
ZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9mb3JtID0gZWxlbWVudC0+ZmluZEZvcm1BbmNl
c3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxl
bWVudCh0aGlzKTsKKyAgICAgICAgbmV3Rm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3Io
KTsKKyAgICBzZXRGb3JtKG5ld0Zvcm0pOwogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQpAQCAtMTU3LDExICsxODMsNyBAQCB2b2lkIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQogICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWVsZW1lbnQtPmZhc3RI
YXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSBy
ZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgaWYgKG1f
Zm9ybSkKLSAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAg
ICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgaWYgKG1f
Zm9ybSkKLSAgICAgICAgICAgIGZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAg
ICAgICAgc2V0Rm9ybShlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCkpOwogICAgICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0
aGlzKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzZXRGb3JtT3duZXIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCmluZGV4IDFhOGUxNjU3ZWZmM2Y5YTVk
Y2U1YmVmYzgzNWJjM2I5NmQ1ODkzNDQuLjYxNTMxYTA1NjliZDJjNThlMTQ2Mzc4ZWMyZjZiNjBl
YTJiMTQzNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
aApAQCAtNTMsMTIgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdHJ1ZSBmb3IgYSBz
dWNjZXNzZnVsIGNvbnRyb2wgKHNlZSBIVE1MNC0xNy4xMy4yKS4KICAgICB2aXJ0dWFsIGJvb2wg
YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9CisgICAgdm9p
ZCB3aWxsRGVzdHJveUZvcm0oKTsKIAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoKTsKIAogcHJv
dGVjdGVkOgotICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKKyAg
ICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKIAogICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgp
OwogICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CkBAIC02NiwxMCArNjYsMTQgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZvaWQgZGlkTW92ZVRv
TmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KTsKIAotICAgIHZvaWQgc2V0Rm9ybShI
VE1MRm9ybUVsZW1lbnQqIGZvcm0pIHsgbV9mb3JtID0gZm9ybTsgfQotICAgIHZvaWQgcmVtb3Zl
RnJvbUZvcm0oKTsKKyAgICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVtZW50Kik7CiAgICAgdm9p
ZCBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VG
b3JtKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUZvcm0oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbEJlVW5hc3NvY2lhdGVkRnJvbURlc3Ryb3lpbmdGb3JtKCk7CisgICAgdmlydHVhbCB2
b2lkIHdhc1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpOworCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdCA9IDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmlu
ZGV4IDhmZTQ1MDRhZTY5ZWExZjViNjZiZjU4OTE2ZDRiZmQwYzk1Yjc5NzIuLjM0NDliYWQwYzg4
MzA2NzNiZTJiZjVhNGE4OTBmMjc5YzY0MmUxNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNTAsNyArNTAsNiBAQCB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRN
TEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
Ci0gICAgLCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoZm9ybSkKICAgICAsIG1fZGlzYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKQEAg
LTYxLDE4ICs2MCwxMiBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvYwogICAgICwgbV93YXNDaGFu
Z2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChmYWxzZSkKICAgICAsIG1faGFzQXV0
b2ZvY3VzZWQoZmFsc2UpCiB7Ci0gICAgaWYgKCF0aGlzLT5mb3JtKCkpCi0gICAgICAgIHNldEZv
cm0oZmluZEZvcm1BbmNlc3RvcigpKTsKLSAgICBpZiAodGhpcy0+Zm9ybSgpKQotICAgICAgICB0
aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0KKyAgICBzZXRGb3JtKGZv
cm0gPyBmb3JtIDogZmluZEZvcm1BbmNlc3RvcigpKTsKICAgICBzZXRIYXNDdXN0b21XaWxsT3JE
aWRSZWNhbGNTdHlsZSgpOwogfQogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1D
b250cm9sRWxlbWVudCgpCiB7Ci0gICAgaWYgKGZvcm0oKSkKLSAgICAgICAgZm9ybSgpLT5yZW1v
dmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
ZXRhY2goKQpAQCAtMTA4LDExICsxMDEsOSBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmZvcm1Ob1ZhbGlkYXRlKCkgY29uc3QKIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBmb3JtQXR0cikgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpCiAg
ICAgICAgIGZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCk7Ci0gICAgICAgIGlmICghZm9ybSgpKQotICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlz
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKKyAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xk
RGlzYWJsZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVs
bCgpOwogICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkgewpAQCAtMjA1LDkg
KzE5Niw2IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1l
bnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpp
bnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIHsKICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUoKTsKLSAgICBpZiAoIWZvcm0oKSkKLSAgICAgICAgZG9jdW1lbnQo
KS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKLQogICAgIEhUTUxFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5jcHAKaW5kZXggZGFiNDdlZmZmMWNmNjdmMDFmM2JiNDU4MmZjMzA4ZmMwYmUw
MjhjNi4uNjdiMjRlNjllMWVjNDAxZTkwYmIyMTY3NDRiNDg0MWQ1YzliNjliMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtOTgsNyArOTgsNyBAQCBIVE1MRm9y
bUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQoKQogICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lz
dGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmZvcm1EZXN0cm95ZWQoKTsKKyAgICAgICAgbV9h
c3NvY2lhdGVkRWxlbWVudHNbaV0tPndpbGxEZXN0cm95Rm9ybSgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1faW1h
Z2VFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKIH0KQEAgLTQ1OSwxOCArNDU5LDExIEBAIHVuc2ln
bmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGFzc29jaWF0ZWRFbGVtCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1F
bGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBpZiAoZS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpOwotICAgICAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKGVsZW1lbnQpOwotICAg
ICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGVsZW1lbnQpOwotICAgIH0KICAg
ICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVsZW1lbnRJbmRleChlKSwgZSk7CiB9
CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudChGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAg
ICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KGUpKTsKICAgICB1bnNpZ25lZCBpbmRleDsKICAgICBmb3IgKGlu
ZGV4ID0gMDsgaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpIHsK
ICAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2luZGV4XSA9PSBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNDZkMTA0OWJkZWI5OWY2N2RkM2M3
ZjY2MTE0ZTVkZWEzMmNhMDliZC4uYzYzMzBlNWZjYjAxZWY4ZDliMDY4ZmI2ODM4Njk5ODc5YzJk
MmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMTUs
MTIgKzExNSw2IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKIHsKICAg
ICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5y
ZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0KLSAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwotCi0gICAg
Ly8gTmVlZCB0byByZW1vdmUgdGhpcyBmcm9tIHRoZSBmb3JtIHdoaWxlIGl0IGlzIHN0aWxsIGFu
IEhUTUxJbnB1dEVsZW1lbnQsCi0gICAgLy8gc28gY2FuJ3Qgd2FpdCBmb3IgdGhlIGJhc2UgY2xh
c3MncyBkZXN0cnVjdG9yIHRvIGRvIGl0LgotICAgIHJlbW92ZUZyb21Gb3JtKCk7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29u
c3QKQEAgLTE3OSw4ICsxNzMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZEF1dG9j
b21wbGV0ZSgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlQ2hlY2tlZFJh
ZGlvQnV0dG9ucygpCiB7Ci0gICAgaWYgKGF0dGFjaGVkKCkgJiYgY2hlY2tlZCgpKQotICAgICAg
ICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworICAgIGNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBpZiAoZm9ybSgpKSB7CiAgICAgICAg
IGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCkt
PmFzc29jaWF0ZWRFbGVtZW50cygpOwpAQCAtMTUwMiw2ICsxNDk1LDQ0IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkKICAgICByZXNldCgp
OwogfQogCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxDaGFuZ2VGb3JtKCkKK3sKKyAgICBj
aGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOworICAgIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Ojp3aWxsQ2hhbmdlRm9ybSgpOworfQorCit2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmRpZENoYW5nZUZvcm0oKQoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpkaWRDaGFuZ2VGb3JtKCk7CisgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0
aGlzKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp3aWxsQmVVbmFzc29jaWF0ZWRGcm9t
RGVzdHJveWluZ0Zvcm0oKQoreworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0
b24odGhpcyk7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxCZVVuYXNzb2Np
YXRlZEZyb21EZXN0cm95aW5nRm9ybSgpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Ondh
c1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpCit7CisgICAgSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6Ondhc1VuYXNzb2NpYXRlZEZyb21EZXN0cm95aW5nRm9ybSgpOworICAgIGNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Cit9CisKK3ZvaWQgSFRNTElucHV0
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIEFTU0VSVChpbkRvY3VtZW50
KCkpOworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Cit9CisKK3Zv
aWQgSFRNTElucHV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCit7CisgICAgQVNTRVJU
KGluRG9jdW1lbnQoKSk7CisgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0
aGlzKTsKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOworfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERv
Y3VtZW50KiBvbGREb2N1bWVudCkKIHsKICAgICBtX2lucHV0VHlwZS0+d2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXgg
MDU0NDM2ZGQ0Njc2MDJjM2UxMTk5ZmU2OGJmOTRmMzA1MWIyNmUzZS4uMTAyNWViMjM3ZTY4ODc0
MGY4YzE1MTM3MWEzZTNjYzM4ZWE4NDE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKQEAgLTI0OSw2ICsyNDksMTIgQEAgcHJpdmF0ZToKICAgICBlbnVtIEF1dG9Db21w
bGV0ZVNldHRpbmcgeyBVbmluaXRpYWxpemVkLCBPbiwgT2ZmIH07CiAgICAgZW51bSBBbnlTdGVw
SGFuZGxpbmcgeyBSZWplY3RBbnksIEFueUlzRGVmYXVsdFN0ZXAgfTsKIAorICAgIHZpcnR1YWwg
dm9pZCB3aWxsQ2hhbmdlRm9ybSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VGb3JtKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxCZVVuYXNzb2NpYXRlZEZy
b21EZXN0cm95aW5nRm9ybSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3YXNVbmFzc29j
aWF0ZWRGcm9tRGVzdHJveWluZ0Zvcm0oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZy
b21Eb2N1bWVudCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1
bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29s
IGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCBlOWJjMzZjMjQ0YWFiYWI1NjM5ODIw
ZDc2MDI3ODNlOTkwZTNhZWRkLi4zZjlmNzdmYjI4NzE0OWNjYmZlZGZkYzZlMDMwN2FiYTVmNzgw
NTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNTUs
MjEgKzU1LDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGlubGluZSBIVE1MT2Jq
ZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKSAKICAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQsIGNyZWF0ZWRCeVBhcnNlciwgU2hvdWxkTm90UHJlZmVyUGx1Z0luc0ZvckltYWdlcykKLSAg
ICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChmb3JtKQogICAgICwgbV9kb2NOYW1lZEl0ZW0odHJ1
ZSkKICAgICAsIG1fdXNlRmFsbGJhY2tDb250ZW50KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKG9iamVjdFRhZykpOwotICAgIGlmICghdGhpcy0+Zm9ybSgpKQotICAgICAgICBzZXRG
b3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7Ci0gICAgaWYgKHRoaXMtPmZvcm0oKSkKLSAgICAgICAg
dGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgIHNldEZvcm0oZm9y
bSA/IGZvcm0gOiBmaW5kRm9ybUFuY2VzdG9yKCkpOwogfQogCiBpbmxpbmUgSFRNTE9iamVjdEVs
ZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7Ci0gICAgaWYgKGZvcm0oKSkKLSAgICAgICAg
Zm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MT2Jq
ZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDQ1Zjc1NmU2NjM5OTQwYTU3OGU5MmUzYTg0MzM0
YzNhMzhhOGM3My4uOTIwMTExNjExMmUxMzUxYWU1OTdmMjQzMzYyNWY0OWMzNDBjYjE2OCAxMDA3
NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBub3QgaW4gYSBEb2N1bWVudCBzaG91
bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91
cC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0wNSAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRXhwZWN0ZWQgdGVzdCBmYWlsdXJl
cyBhZnRlciBTa2lhIGlzIHJvbGxlZCB0byAyOTE4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2Mjg4
OTZlY2M2MDEzNGQ0ZDI5MjdkY2E0MDgxY2NmYzdjYTY2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDc2IEBACitWYXJpb3VzIHRlc3RzIGFib3V0IHJhZGlvIGJ1dHRvbiBncm91cC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NoYW5naW5nIHRoZSBuYW1lIGF0dHJpYnV0
ZSBvZiBhIHJhZGlvIGJ1dHRvbjoKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlzIHRydWUK
K1BBU1MgJCgicmFkaW8xLTIiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTEiKS5j
aGVja2VkIGlzIGZhbHNlCitQQVNTICQoInJhZGlvMS0yIikuY2hlY2tlZCBpcyB0cnVlCitDaGFu
Z2luZyB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgYSByYWRpbyBidXR0b24gbm90IGluIGEgZG9jdW1l
bnQ6CitQQVNTICQoInJhZGlvMS0xIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTIG9ycGhhblRyZWUu
Zmlyc3RDaGlsZC5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlz
IHRydWUKK1BBU1Mgb3JwaGFuVHJlZS5maXJzdENoaWxkLmNoZWNrZWQgaXMgdHJ1ZQorCitDaGFu
Z2luZyB0aGUgdHlwZSBvZiBhbiBpbnB1dCBlbGVtZW50IHRvIHJhZGlvOgorUEFTUyAkKCJyYWRp
bzEtMSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJyYWRpbzEtMSIpLmNoZWNrZWQgaXMgZmFs
c2UKK1BBU1MgJCgidGV4dDEtMiIpLmNoZWNrZWQgaXMgdHJ1ZQorQ2hhbmdpbmcgdGhlIHR5cGUg
b2YgYW4gaW5wdXQgZWxlbWVudCBub3QgaW4gYSBkb2N1bWVudCB0byByYWRpbzoKK1BBU1MgJCgi
cmFkaW8xLTEiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlz
IHRydWUKK1BBU1Mgb3JwaGFuVHJlZS5maXJzdENoaWxkLmNoZWNrZWQgaXMgdHJ1ZQorCitDaGVj
a2luZyBhIHJhZGlvIGJ1dHRvbiBub3QgaW4gYSBkb2N1bWVudDoKK1BBU1MgJCgicmFkaW8xLTEi
KS5jaGVja2VkIGlzIHRydWUKK1BBU1Mgb3JwaGFuVHJlZS5maXJzdENoaWxkLmNoZWNrZWQgaXMg
dHJ1ZQorCitNb3ZpbmcgYSBjaGVja2VkIHJhZGlvIGJ1dHRvbiB0byBhbm90aGVyIGZvcm06CitQ
QVNTICQoIm91dHNpZGUiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgiaW5zaWRlIikuY2hlY2tl
ZCBpcyB0cnVlCitQQVNTICQoImluc2lkZTIiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgib3V0
c2lkZSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJpbnNpZGUiKS5jaGVja2VkIGlzIGZhbHNl
CitQQVNTICQoImluc2lkZTIiKS5jaGVja2VkIGlzIHRydWUKK1doZW4gYSByYWRpbyBpbiBhIGZv
cm0gaXMgcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBhZmZlY3QgRG9jdW1lbnQtbGV2ZWwgZ3JvdXBz
OgorUEFTUyAkKCJvdXRzaWRlIikuY2hlY2tlZCBpcyB0cnVlCisKK1JlbW92aW5nIGFuIGFuY2Vz
dG9yIG93bmVyIGZvcm06CitQQVNTICQoInJhZGlvMC0xIikuY2hlY2tlZCBpcyB0cnVlCisKK0No
YW5naW5nIGZvcm0gYXR0cmlidXRlCitQQVNTICQoInJhZGlvMS0xIikuY2hlY2tlZCBpcyB0cnVl
CitQQVNTICQoInJhZGlvMS0yIikuY2hlY2tlZCBpcyBmYWxzZQorUEFTUyAkKCJyYWRpbzEtMyIp
LmNoZWNrZWQgaXMgdHJ1ZQorUmVtb3ZpbmcgYSBub24tYW5jZXN0b3Igb3duZXIgZm9ybToKK1BB
U1MgJCgicmFkaW8xLTMiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgicmFkaW8xLTQiKS5jaGVj
a2VkIGlzIHRydWUKKyhUaGUgZm9sbG93aW5nIHRlc3QgZGVwZW5kcyBvbiBnYygpLiBJdCBtaWdo
dCBmYWlsIG9uIGEgcmVhbCBicm93c2VyLikKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlz
IGZhbHNlCitQQVNTICQoInJhZGlvMS0zIikuY2hlY2tlZCBpcyB0cnVlCisKK0FkZGluZyBhIHJh
ZGlvIGJ1dHRvbiB0byBhbiBvcnBoYW4gdHJlZToKK1BBU1Mgb3JwaGFuVHJlZS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkIGlzIHRydWUKK1BBU1Mgb3JwaGFuVHJlZS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkIGlzIHRydWUKK0FkZGluZyB0
aGUgb3JwaGFuIHRyZWUgdG8gYSBkb2N1bWVudDoKK1BBU1Mgb3JwaGFuVHJlZS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkIGlzIGZhbHNlCitQQVNTIG9ycGhhblRyZWUu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMV0uY2hlY2tlZCBpcyB0cnVlCitQYXJzaW5n
IGFuIG9ycGhhbiBmb3JtOgorUEFTUyBvcnBoYW5UcmVlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJp
bnB1dCIpWzBdLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyBvcnBoYW5UcmVlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJpbnB1dCIpWzFdLmNoZWNrZWQgaXMgdHJ1ZQorCitNb3ZpbmcgYSByYWRpbyBidXR0
b24gdG8gYW5vdGhlciBEb2N1bWVudDoKK1BBU1MgZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQt
MiIpLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIp
LmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyBkb2MuZ2V0RWxlbWVudEJ5SWQoInJhZGlvNC0xIikuY2hl
Y2tlZCBpcyB0cnVlCisKK0Nsb25pbmcgYSByYWRpbyBidXR0b246CitQQVNTIG9yaWdpbmFsLmNo
ZWNrZWQgaXMgdHJ1ZQorUEFTUyBjbG9uZWRSYWRpby5jaGVja2VkIGlzIHRydWUKKworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmFiNGVm
ZGI1MmRkOTMzNzRmY2U0NDE4NDkzMTM5OTYwZDE5ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91cC5odG1sCkBAIC0wLDAgKzEsMTcx
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9InBhcmVudCI+PC9kaXY+
CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVmFyaW91cyB0ZXN0cyBhYm91dCByYWRpbyBidXR0
b24gZ3JvdXAuJyk7CisKK2NvbnN0IENoZWNrZWQgPSB0cnVlOworY29uc3QgVW5jaGVja2VkID0g
ZmFsc2U7CisKK2Z1bmN0aW9uIGNyZWF0ZVJhZGlvKG5hbWUsIGNoZWNrZWQsIGlkKSB7CisgICAg
dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBpbnB1dC50
eXBlID0gJ3JhZGlvJzsKKyAgICBpbnB1dC5uYW1lID0gbmFtZTsKKyAgICBpbnB1dC5jaGVja2Vk
ID0gISFjaGVja2VkOworICAgIGlucHV0LmlkID0gaWQ7CisgICAgcmV0dXJuIGlucHV0OworfQor
CitmdW5jdGlvbiAkKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
KTsKK30KKwordmFyIHBhcmVudCA9ICQoJ3BhcmVudCcpOworCitkZWJ1ZygnQ2hhbmdpbmcgdGhl
IG5hbWUgYXR0cmlidXRlIG9mIGEgcmFkaW8gYnV0dG9uOicpOworcGFyZW50LmlubmVySFRNTCA9
ICc8Zm9ybT4nICsKKyAgICAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVja2VkIGlk
PXJhZGlvMS0xPicgKworICAgICc8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUyIGNoZWNrZWQg
aWQ9cmFkaW8xLTI+JyArCisgICAgJzwvZm9ybT4nOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEt
MSIpLmNoZWNrZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTIiKS5jaGVja2VkJyk7Cisk
KCdyYWRpbzEtMicpLm5hbWUgPSAnbmFtZTEnOworc2hvdWxkQmVGYWxzZSgnJCgicmFkaW8xLTEi
KS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS0yIikuY2hlY2tlZCcpOworCitk
ZWJ1ZygnQ2hhbmdpbmcgdGhlIG5hbWUgYXR0cmlidXRlIG9mIGEgcmFkaW8gYnV0dG9uIG5vdCBp
biBhIGRvY3VtZW50OicpOworcGFyZW50LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1yYWRpbyBu
YW1lPW5hbWUxIGNoZWNrZWQgaWQ9cmFkaW8xLTE+JzsKK3ZhciBvcnBoYW5UcmVlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CitvcnBoYW5UcmVlLmlubmVySFRNTCA9ICc8aW5wdXQg
dHlwZT1yYWRpbyBuYW1lPW5hbWUyIGNoZWNrZWQ+JzsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8x
LTEiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJ29ycGhhblRyZWUuZmlyc3RDaGlsZC5jaGVj
a2VkJyk7CitvcnBoYW5UcmVlLmZpcnN0Q2hpbGQubmFtZSA9ICduYW1lMSc7CitzaG91bGRCZVRy
dWUoJyQoInJhZGlvMS0xIikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCdvcnBoYW5UcmVlLmZp
cnN0Q2hpbGQuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1ZygnQ2hhbmdpbmcgdGhlIHR5
cGUgb2YgYW4gaW5wdXQgZWxlbWVudCB0byByYWRpbzonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAn
PGZvcm0+JyArCisgICAgJzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1y
YWRpbzEtMT4nICsKKyAgICAnPGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUxIGNoZWNrZWQgaWQ9
dGV4dDEtMj4nICsKKyAgICAnPC9mb3JtPic7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS0xIiku
Y2hlY2tlZCcpOworJCgndGV4dDEtMicpLnR5cGUgPSAncmFkaW8nOworc2hvdWxkQmVGYWxzZSgn
JCgicmFkaW8xLTEiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJyQoInRleHQxLTIiKS5jaGVj
a2VkJyk7CisKK2RlYnVnKCdDaGFuZ2luZyB0aGUgdHlwZSBvZiBhbiBpbnB1dCBlbGVtZW50IG5v
dCBpbiBhIGRvY3VtZW50IHRvIHJhZGlvOicpOworcGFyZW50LmlubmVySFRNTCA9ICc8aW5wdXQg
dHlwZT1yYWRpbyBuYW1lPW5hbWUxIGNoZWNrZWQgaWQ9cmFkaW8xLTE+JzsKK29ycGhhblRyZWUu
aW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lMSBjaGVja2VkPic7CitzaG91
bGRCZVRydWUoJyQoInJhZGlvMS0xIikuY2hlY2tlZCcpOworb3JwaGFuVHJlZS5maXJzdENoaWxk
LnR5cGUgPSAncmFkaW8nOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMSIpLmNoZWNrZWQnKTsK
K3Nob3VsZEJlVHJ1ZSgnb3JwaGFuVHJlZS5maXJzdENoaWxkLmNoZWNrZWQnKTsKKworZGVidWco
JycpOworZGVidWcoJ0NoZWNraW5nIGEgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGRvY3VtZW50Oicp
OworcGFyZW50LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUxIGNoZWNr
ZWQgaWQ9cmFkaW8xLTE+JzsKK29ycGhhblRyZWUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPXJh
ZGlvIG5hbWU9bmFtZTE+JzsKK29ycGhhblRyZWUuZmlyc3RDaGlsZC5jaGVja2VkID0gdHJ1ZTsK
K3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTEiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJ29y
cGhhblRyZWUuZmlyc3RDaGlsZC5jaGVja2VkJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdNb3Zp
bmcgYSBjaGVja2VkIHJhZGlvIGJ1dHRvbiB0byBhbm90aGVyIGZvcm06Jyk7CitwYXJlbnQuaW5u
ZXJIVE1MID0gJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ibmFtZTEiIGNoZWNrZWQgaWQ9Im91
dHNpZGUiPicgKworICAgICc8Zm9ybSBpZD0iZm9ybTEiPicgKworICAgICc8aW5wdXQgdHlwZT0i
cmFkaW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlkPSJpbnNpZGUiPicgKworICAgICc8L2Zvcm0+
JyArCisgICAgJzxmb3JtIGlkPSJmb3JtMiI+JyArCisgICAgJzxpbnB1dCB0eXBlPSJyYWRpbyIg
bmFtZT0ibmFtZTEiIGNoZWNrZWQgaWQ9Imluc2lkZTIiPicgKworICAgICc8L2Zvcm0+Jworc2hv
dWxkQmVUcnVlKCckKCJvdXRzaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNp
ZGUiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUoJyQoImluc2lkZTIiKS5jaGVja2VkJyk7Cisk
KCdmb3JtMScpLmFwcGVuZENoaWxkKCQoJ2luc2lkZTInKSk7CitzaG91bGRCZVRydWUoJyQoIm91
dHNpZGUiKS5jaGVja2VkJyk7CitzaG91bGRCZUZhbHNlKCckKCJpbnNpZGUiKS5jaGVja2VkJyk7
CitzaG91bGRCZVRydWUoJyQoImluc2lkZTIiKS5jaGVja2VkJyk7CitkZWJ1ZygnV2hlbiBhIHJh
ZGlvIGluIGEgZm9ybSBpcyByZW1vdmVkLCBpdCBzaG91bGQgbm90IGFmZmVjdCBEb2N1bWVudC1s
ZXZlbCBncm91cHM6Jyk7CitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEnKSk7CitzaG91bGRC
ZVRydWUoJyQoIm91dHNpZGUiKS5jaGVja2VkJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdSZW1v
dmluZyBhbiBhbmNlc3RvciBvd25lciBmb3JtOicpOworcGFyZW50LmlubmVySFRNTCA9ICc8aW5w
dXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUwIGNoZWNrZWQgaWQ9cmFkaW8wLTE+JyArCisgICAgJzxm
b3JtIGlkPWZvcm0xPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTAgY2hlY2tlZCBpZD1yYWRp
bzAtMj48L2Zvcm0+JzsKK3BhcmVudC5yZW1vdmVDaGlsZCgkKCdmb3JtMScpKTsKK2djKCk7Citz
aG91bGRCZVRydWUoJyQoInJhZGlvMC0xIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1
ZygnQ2hhbmdpbmcgZm9ybSBhdHRyaWJ1dGUnKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGlucHV0
IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVja2VkIGlkPXJhZGlvMS0xPicgKworICAgICc8Zm9y
bSBpZD1mb3JtMT48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUxIGNoZWNrZWQgaWQ9cmFkaW8x
LTI+PC9mb3JtPicgKworICAgICc8Zm9ybSBpZD1mb3JtMj48aW5wdXQgdHlwZT1yYWRpbyBuYW1l
PW5hbWUxIGNoZWNrZWQgaWQ9cmFkaW8xLTM+PC9mb3JtPic7CiskKCdyYWRpbzEtMycpLnNldEF0
dHJpYnV0ZSgnZm9ybScsICdmb3JtMScpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMSIpLmNo
ZWNrZWQnKTsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0yIikuY2hlY2tlZCcpOworc2hvdWxk
QmVUcnVlKCckKCJyYWRpbzEtMyIpLmNoZWNrZWQnKTsKKworZGVidWcoJ1JlbW92aW5nIGEgbm9u
LWFuY2VzdG9yIG93bmVyIGZvcm06Jyk7CiskKCdmb3JtMicpLmFwcGVuZENoaWxkKGNyZWF0ZVJh
ZGlvKCduYW1lMScsIENoZWNrZWQsICdyYWRpbzEtNCcpKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFk
aW8xLTMiKS5jaGVja2VkJyk7CisvLyBJZiB0aGVyZSBpcyBubyBlbGVtZW50cyB3aXRoIElEIHNw
ZWNpZmllZCBieSBmb3JtPSBhdHRyaWJ1dGUsIHRoZSBmb3JtCisvLyBjb250cm9sIGlzIG5vdCBh
c3NvY2lhdGVkIHRvIGFueSBmb3Jtcy4KK3BhcmVudC5yZW1vdmVDaGlsZCgkKCdmb3JtMScpKTsK
Ky8vIEZJWE1FOiBXZSBuZWVkIHRvIGNhbGwgZ2MoKSB0d2ljZSBvbiBBcHBsZSBNYWMuCitnYygp
OworZ2MoKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTQiKS5jaGVja2VkJyk7CitkZWJ1Zygn
KFRoZSBmb2xsb3dpbmcgdGVzdCBkZXBlbmRzIG9uIGdjKCkuIEl0IG1pZ2h0IGZhaWwgb24gYSBy
ZWFsIGJyb3dzZXIuKScpOworc2hvdWxkQmVGYWxzZSgnJCgicmFkaW8xLTEiKS5jaGVja2VkJyk7
CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS0zIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7Citk
ZWJ1ZygnQWRkaW5nIGEgcmFkaW8gYnV0dG9uIHRvIGFuIG9ycGhhbiB0cmVlOicpOworb3JwaGFu
VHJlZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworb3JwaGFuVHJlZS5hcHBlbmRD
aGlsZChjcmVhdGVSYWRpbygnbmFtZTInLCBDaGVja2VkLCAnJykpOworb3JwaGFuVHJlZS5hcHBl
bmRDaGlsZChjcmVhdGVSYWRpbygnbmFtZTInLCBDaGVja2VkLCAnJykpOworc2hvdWxkQmVUcnVl
KCdvcnBoYW5UcmVlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLmNoZWNrZWQnKTsK
K3Nob3VsZEJlVHJ1ZSgnb3JwaGFuVHJlZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsx
XS5jaGVja2VkJyk7CitkZWJ1ZygnQWRkaW5nIHRoZSBvcnBoYW4gdHJlZSB0byBhIGRvY3VtZW50
OicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvcnBoYW5UcmVlKTsKK3Nob3VsZEJlRmFs
c2UoJ29ycGhhblRyZWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0uY2hlY2tlZCcp
Oworc2hvdWxkQmVUcnVlKCdvcnBoYW5UcmVlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIp
WzFdLmNoZWNrZWQnKTsKKworZGVidWcoJ1BhcnNpbmcgYW4gb3JwaGFuIGZvcm06Jyk7Citkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKG9ycGhhblRyZWUpOworb3JwaGFuVHJlZS5pbm5lckhUTUwg
PSAnPGZvcm0+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMyBjaGVja2VkPjxpbnB1dCB0eXBl
PXJhZGlvIG5hbWU9bmFtZTMgY2hlY2tlZD48L2Zvcm0+JzsKK3Nob3VsZEJlVHJ1ZSgnb3JwaGFu
VHJlZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkJyk7CitzaG91bGRC
ZVRydWUoJ29ycGhhblRyZWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMV0uY2hlY2tl
ZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1ZygnTW92aW5nIGEgcmFkaW8gYnV0dG9uIHRvIGFub3Ro
ZXIgRG9jdW1lbnQ6Jyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPXJhZGlvIG5h
bWU9bmFtZTQgY2hlY2tlZCBpZD1yYWRpbzQtMT4nOwordmFyIGRvYyA9IGRvY3VtZW50LmltcGxl
bWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpOworZG9jLmJvZHkuaW5uZXJIVE1MID0gJzxp
bnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTQgY2hlY2tlZCBpZD1yYWRpbzQtMj4nOworZG9jLmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jLmFkb3B0Tm9kZSgkKCdyYWRpbzQtMScpKSk7CitzaG91bGRCZUZh
bHNlKCdkb2MuZ2V0RWxlbWVudEJ5SWQoInJhZGlvNC0yIikuY2hlY2tlZCcpOworc2hvdWxkQmVU
cnVlKCdkb2MuZ2V0RWxlbWVudEJ5SWQoInJhZGlvNC0xIikuY2hlY2tlZCcpOworcGFyZW50LmFw
cGVuZENoaWxkKGNyZWF0ZVJhZGlvKCduYW1lNCcsIENoZWNrZWQsICcnKSk7CitzaG91bGRCZVRy
dWUoJ2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVja2VkJyk7CisKK2RlYnVnKCcn
KTsKK2RlYnVnKCdDbG9uaW5nIGEgcmFkaW8gYnV0dG9uOicpOwordmFyIG9yaWdpbmFsID0gY3Jl
YXRlUmFkaW8oJ25hbWU1JywgQ2hlY2tlZCwgJycpOworcGFyZW50LmlubmVySFRNTCA9ICcnOwor
cGFyZW50LmFwcGVuZENoaWxkKG9yaWdpbmFsKTsKK3ZhciBjbG9uZWRSYWRpbyA9IG9yaWdpbmFs
LmNsb25lTm9kZSh0cnVlKTsKK3Nob3VsZEJlVHJ1ZSgnb3JpZ2luYWwuY2hlY2tlZCcpOworc2hv
dWxkQmVUcnVlKCdjbG9uZWRSYWRpby5jaGVja2VkJyk7CisKK3BhcmVudC5pbm5lckhUTUwgPSAn
JzsKK2RlYnVnKCcnKTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121792</attachid>
            <date>2012-01-09 21:51:32 -0800</date>
            <delta_ts>2012-01-10 20:32:07 -0800</delta_ts>
            <desc>Patch by tkent 5</desc>
            <filename>bug-45719-20120110145129.patch</filename>
            <type>text/plain</type>
            <size>30930</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzOGMyNzNlOWI2MTRl
MTYxYjJhZDNhZTUxZjUzNGEzYzgwM2E3OC4uNDgyNzMxOWFlZGMwN2ZmZmQ2OGFiYWVkZWFiOGU3
MjEzMDM1YjQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTAxLTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBIHJhZGlvIGJ1dHRvbiBu
b3QgaW4gYSBkb2N1bWVudCBzaG91bGQgbm90IGpvaW4gYSByYWRpbyBidXR0b24gZ3JvdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgcGVyIHRoZSBz
dGFuZGFyZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvcnMsIHdlIHNob3VsZCBub3QgYWRkIGEK
KyAgICAgICAgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGRvY3VtZW50IHRvIGEgcmFkaW8gYnV0dG9u
IGdyb3VwLgorCisgICAgICAgIFNvLCBDaGVja2VkUmFkaW9CdXR0b24gbWVtYmVyIGZ1bmN0aW9u
cyBzaG91bGQgYmUgY2FsbGVkIGluCisgICAgICAgIGluc2VydGVkSW50b0RvY3VtZW50KCkgYW5k
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKSwgYW5kIHRoZXkgc2hvdWxkIGRvCisgICAgICAgIG5vdGhp
bmcgaWYgdGhlIHNwZWNpZmllZCByYWRpbyBidXR0b24gaXMgbm90IGluIGEgZG9jdW1lbnQuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBhIGJ1ZyB0aGF0IGZvcm0gb3duZXIgY2hh
bmdlIGJ5ICdmb3JtJyBhdHRyaWJ1dGUKKyAgICAgICAgZGlkbid0IHVwZGF0ZSByYWRpbyBidXR0
b24gZ3JvdXBzIGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3JhZGlvL3Jh
ZGlvLWdyb3VwLmh0bWwKKworICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNob3VsZE1ha2VSYWRpb0dyb3VwKTogQSBoZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgPGlucHV0PiBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRp
b0J1dHRvbnM6OmFkZEJ1dHRvbik6CisgICAgICAgIC0gQ2hhbmdlIHRoZSBhcmd1bWVudCB0eXBl
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAg
LSBVc2Ugc2hvdWxkTWFrZVJhZGlvR3JvdXAoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRS
YWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6IGRpdHRvLgorICAgICAgICAqIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmg6CisgICAgICAgICBDaGFuZ2UgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIGFk
ZEJ1dHRvbigpIGFuZCByZW1vdmVCdXR0b24oKToKKyAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIC0+IEhUTUxJbnB1dEVsZW1lbnQqLgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgIERvIG5vdCB1cGRhdGUgbV9mb3JtIGV4Y2VwdCBpbiBz
ZXRGb3JtKCkgYW5kIGZvcm1EZXN0b3J5ZWQoKS4KKyAgICAgICAgIFRoaXMgaGVscHMgdXMgdG8g
Y2FsbCByZWdpc3RlckZvcm1FbGVtZW50KCkgYW5kIHJlbW92ZUZyb21FbGVtZW50KCkKKyAgICAg
ICAgIGNvcnJlY3RseSwgYW5kIGNhbGwgd2lsbENoYW5nZUZvcm0oKS9kaWRDaGFuZ2VGb3JtKCkg
aG9va3MgY29ycmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsQ2hhbmdlRm9ybSk6CisgICAgICAgIFRoaXMgdmly
dHVhbCBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvd25lciBmb3JtIGlzIHVkcGF0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRpZENoYW5nZUZvcm0p
OgorICAgICAgICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBvd25l
ciBmb3JtIHdhcyB1ZHBhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojpmb3JtV2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgLSBSZW5hbWFlZCBmcm9tIGZvcm1E
ZXN0b3J5ZWQoKQorICAgICAgICAtIEFkZCBjYWxscyB0byB3aWxsQ2hhbmdlRm9ybSgpIGFuZCBk
aWRDaGFuZ2VGb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OnJlc2V0Rm9ybU93bmVyKTogVXNlIHNldEZvcm0oKS4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOiBkaXR0by4KKyAgICAgICAg
KiBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KTogVXNlIHNldEZvcm0oKS4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KToK
KyAgICAgICAgcmVtb3ZlRm9ybUVsZW1lbnQoKSBpcyBub3QgbmVlZGVkLiB+Rm9ybUFzc29jaWF0
ZWRFbGVtZW50KCkgdHJlYXRzIGl0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICBObyBuZWVkIHRvIGhhbmRs
ZSBDaGVja2VkUmFkaW9CdXR0b25zIGhlcmUuIEl0IGlzIGhhbmRsZWQgYnkgSFRNTElucHV0RWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVk
SW50b1RyZWUpOiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQpOgorICAg
ICAgICAgUmVuYW1lIGZvcm1EZXN0cm95ZWQoKSB3aXRoIHdpbGxEZXN0cm95Rm9ybSgpLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KToKKyAg
ICAgICAgV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgcmFkaW8gYnV0dG9uIGdyb3VwcyBoZXJlLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudCk6IGRp
dHRvLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIENhbGxz
IHNldEZvcm0oMCkgc28gdGhhdCBpdCBjYWxscyBjb3JyZWN0IHZpcnR1YWwgZnVuY3Rpb25zIG9m
CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50Ojp1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKToKKyAgICAgICAgQ2hlY2tpbmcgYXR0
YWNoZWQoKSB3YXMgd3JvbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3
aWxsQ2hhbmdlRm9ybSk6CisgICAgICAgIFJlbW92ZSB0aGlzIHJhZGlvIGJ1dHRvbiBmcm9tIGEg
cmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0aGUgb2xkIGZvcm0uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpkaWRDaGFuZ2VGb3JtKToKKyAgICAgICAgQWRkIHRoaXMgcmFkaW8g
YnV0dG9uIHRvIGEgcmFkaW8gYnV0dG9uIGdyb3VwIGZvciB0aGUgbmV3IGZvcm0uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAg
ICAgIEFkZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24oKSBjYWxsLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAg
IEFkZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oKSBjYWxsLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAg
ICBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBDaGVja2VkUmFkaW9CdXR0b24oKSBoZXJlIGJlY2F1
c2UKKyAgICAgICAgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGhhbmRsZXMgaXQuCisgICAgICAgICog
aHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVs
ZW1lbnQpOiBVc2Ugc2V0Rm9ybSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQ6On5IVE1MT2JqZWN0RWxlbWVudCk6CisgICAgICAgIHJlbW92ZUZvcm1FbGVtZW50KCkgaXMg
bm90IG5lZWRlZC4gfkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHRyZWF0cyBpdC4KKwogMjAxMi0w
MS0wOSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFVwc3RyZWFtIGNoYW5n
ZSB0byBkaXNhYmxlIGlucHV0W2NvbG9yXSBjc3MgcnVsZXMgZm9yIEJsYWNrQmVycnkgcG9ydApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IDM4ZTVlZmJi
YzkxYzYwY2NiNDVhNTQ2NmU1ZmI0YjI5YzA3NDFhZTAuLjVhN2U1Yzk1Y2M5OWQyNjA0NGFjYzQ4
MGQ2OTkxMzhkZjU4MGJjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0
dG9ucy5jcHAKQEAgLTI1LDM0ICsyNSwzMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGVsZW1lbnQpCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTWFrZVJhZGlvR3JvdXAoSFRNTElu
cHV0RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWRkIHJhZGlv
IGJ1dHRvbnMuCi0gICAgaWYgKCFlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpICYmICFlbGVtZW50LT5u
YW1lKCkuaXNFbXB0eSgpICYmIGVsZW1lbnQtPmluRG9jdW1lbnQoKTsKK30KIAotICAgIC8vIFdp
dGhvdXQgYSBuYW1lLCB0aGVyZSBpcyBubyBncm91cC4KLSAgICBpZiAoZWxlbWVudC0+bmFtZSgp
LmlzRW1wdHkoKSkKK3ZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFzaG91bGRNYWtlUmFkaW9Hcm91cChlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwotCiAgICAgLy8g
V2Ugb25seSB0cmFjayBjaGVja2VkIGJ1dHRvbnMuCi0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmNo
ZWNrZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQtPmNoZWNrZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKICAgICAgICAgbV9uYW1l
VG9DaGVja2VkUmFkaW9CdXR0b25NYXAgPSBhZG9wdFB0cihuZXcgTmFtZVRvSW5wdXRNYXApOwog
Ci0gICAgcGFpcjxOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbmFt
ZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgaW5w
dXRFbGVtZW50KTsKKyAgICBwYWlyPE5hbWVUb0lucHV0TWFwOjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmFkZChlbGVtZW50LT5uYW1lKCku
aW1wbCgpLCBlbGVtZW50KTsKICAgICBpZiAocmVzdWx0LnNlY29uZCkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIG9sZENoZWNrZWRCdXR0b24gPSByZXN1bHQu
Zmlyc3QtPnNlY29uZDsKLSAgICBpZiAob2xkQ2hlY2tlZEJ1dHRvbiA9PSBpbnB1dEVsZW1lbnQp
CisgICAgaWYgKG9sZENoZWNrZWRCdXR0b24gPT0gZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBpbnB1dEVsZW1lbnQ7CisgICAgcmVzdWx0LmZp
cnN0LT5zZWNvbmQgPSBlbGVtZW50OwogICAgIG9sZENoZWNrZWRCdXR0b24tPnNldENoZWNrZWQo
ZmFsc2UpOwogfQogCkBAIC02Niw4ICs2NCwxMCBAQCBIVE1MSW5wdXRFbGVtZW50KiBDaGVja2Vk
UmFkaW9CdXR0b25zOjpjaGVja2VkQnV0dG9uRm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJgog
ICAgIHJldHVybiBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+Z2V0KG5hbWUuaW1wbCgp
KTsKIH0KIAotdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3Zl
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiB7CisgICAgaWYgKCFlbGVtZW50LT5p
c1JhZGlvQnV0dG9uKCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoZWxlbWVudC0+bmFtZSgp
LmlzRW1wdHkoKSB8fCAhbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIHJl
dHVybjsKICAgICAKQEAgLTc3LDEwICs3Nyw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6
cmVtb3ZlQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0
ID09IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9
IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEFTU0VSVF9VTlVT
RUQoaW5wdXRFbGVtZW50LCBpbnB1dEVsZW1lbnQpOwotICAgIEFTU0VSVChpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0
b24oKSk7CisgICAgQVNTRVJUKGVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSk7CiAKICAg
ICBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+cmVtb3ZlKGl0KTsKICAgICBpZiAobV9u
YW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5oCmluZGV4IDBmYTQ1N2FjYjQ2MmQ3ZWJlMWFjYzVhN2U5YTlm
MDNjZjM4ZTllODEuLjkyNWI1MDY3ODJhNDFjMjdkMTU0N2VmMDE5OWFkOTVmNWJkYTMyMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaApAQCAtMjcsMTMgKzI3LDEy
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIENoZWNrZWRSYWRpb0J1dHRvbnMg
ewogcHVibGljOgotICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsK
LSAgICB2b2lkIHJlbW92ZUJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdm9p
ZCBhZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQqKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9y
R3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0OwogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IGZl
YjFkMGQ3YTA3MjVkMTI0OTFhYjExMDhmYzRiMmMwZTA1YTBkODkuLmVlZGViNjkyYTJmMDNlMjhk
YmQ3ZjRmYmQ5MWFjZWNkNDBkMTQ5YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5jcHAKQEAgLTM1LDEzICszNSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IG1f
Zm9ybShmb3JtKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQo
KQorICAgIDogbV9mb3JtKDApCiB7CiB9CiAKIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1B
c3NvY2lhdGVkRWxlbWVudCgpCiB7CisgICAgc2V0Rm9ybSgwKTsKIH0KIAogVmFsaWRpdHlTdGF0
ZSogRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp2YWxpZGl0eSgpCkBAIC04MCwxNSArODEsMTIgQEAg
dm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogICAgICAgICAv
LyBSZXNldHMgdGhlIGZvcm0gb3duZXIgYXQgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSBlbGVtZW50
IGRvbid0CiAgICAgICAgIC8vIGFzc29jaWF0ZSBhbnkgZm9ybSBlbGVtZW50cyB3aGVuIHRoZXJl
IGlzIG5vIGVsZW1lbnQgd2hpY2ggaGFzCiAgICAgICAgIC8vIHRoZSBnaXZlbiBJRC4KLSAgICAg
ICAgaWYgKG1fZm9ybSkgewotICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0
aGlzKTsKLSAgICAgICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgSFRNTEZv
cm1FbGVtZW50KiBuZXdGb3JtID0gMDsKICAgICAgICAgRWxlbWVudCogZm9ybUVsZW1lbnQgPSBl
bGVtZW50LT50cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShmb3JtQXR0cikpOwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQt
Pmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKLSAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgICAgICAgIG1fZm9ybS0+cmVn
aXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG5ld0Zvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICAgIH0KKyAgICAgICAgc2V0
Rm9ybShuZXdGb3JtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fZm9ybSkg
ewpAQCAtOTYsOSArOTQsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvVHJlZSgpCiAgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZv
cm0uICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCiAgICAgICAgIC8vIHNldHRpbmcgYSBmb3Jt
LCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAg
ICAgIC8vIGFuZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zv
cm0gPSBlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgIGlmIChtX2Zvcm0pCi0g
ICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIHNl
dEZvcm0oZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKICAgICB9CiB9CiAKQEAgLTExNywx
NSArMTEzLDM4IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUo
KQogICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRy
ZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgogICAgIC8vIE90aGVyd2lz
ZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdz
IGxpc3Qgb2YgZWxlbWVudHMuCiAgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50KSAh
PSBmaW5kUm9vdChtX2Zvcm0pKQotICAgICAgICByZW1vdmVGcm9tRm9ybSgpOworICAgICAgICBz
ZXRGb3JtKDApOworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Rm9ybShIVE1M
Rm9ybUVsZW1lbnQqIG5ld0Zvcm0pCit7CisgICAgaWYgKG1fZm9ybSA9PSBuZXdGb3JtKQorICAg
ICAgICByZXR1cm47CisgICAgd2lsbENoYW5nZUZvcm0oKTsKKyAgICBpZiAobV9mb3JtKQorICAg
ICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgIG1fZm9ybSA9IG5ld0Zv
cm07CisgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50
KHRoaXMpOworICAgIGRpZENoYW5nZUZvcm0oKTsKIH0KIAotdm9pZCBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxs
Q2hhbmdlRm9ybSgpCiB7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRDaGFu
Z2VGb3JtKCkKK3sKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1XaWxsQmVE
ZXN0cm95ZWQoKQoreworICAgIEFTU0VSVChtX2Zvcm0pOwogICAgIGlmICghbV9mb3JtKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICB3
aWxsQ2hhbmdlRm9ybSgpOwogICAgIG1fZm9ybSA9IDA7CisgICAgZGlkQ2hhbmdlRm9ybSgpOwog
fQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIoKQpAQCAtMTM1
LDkgKzE1NCw4IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcigp
CiAgICAgaWYgKG1fZm9ybSkgewogICAgICAgICBpZiAoZm9ybUlkLmlzTnVsbCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwog
ICAgIH0KLSAgICBtX2Zvcm0gPSAwOworICAgIEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSA9IDA7
CiAgICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7CiAg
ICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUg
YXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1
bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KQEAgLTE0NSwxMSArMTYzLDEwIEBAIHZv
aWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcigpCiAgICAgICAgIC8vIHRy
ZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCiAgICAg
ICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGVsZW1lbnQtPnRyZWVTY29wZSgpLT5nZXRFbGVt
ZW50QnlJZChmb3JtSWQpOwogICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVu
dC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CisgICAgICAgICAgICBuZXdGb3JtID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVtZW50KTsKICAgICB9IGVsc2UK
LSAgICAgICAgbV9mb3JtID0gZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmICht
X2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAg
ICAgbmV3Rm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICBzZXRGb3JtKG5l
d0Zvcm0pOwogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNo
YW5nZWQoKQpAQCAtMTU3LDExICsxNzQsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1M
RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0
dHIpKSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRv
IHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAg
IG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IGVsZW1l
bnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAg
IGZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgc2V0Rm9ybShlbGVt
ZW50LT5maW5kRm9ybUFuY2VzdG9yKCkpOwogICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51
bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKICAgICB9IGVsc2UK
ICAgICAgICAgcmVzZXRGb3JtT3duZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oCmluZGV4IDFhOGUxNjU3ZWZmM2Y5YTVkY2U1YmVmYzgzNWJjM2I5NmQ1
ODkzNDQuLmJlNDMxNjU3MTYxZDA2YzFkNTVkOTBiYTYyODE2YjRiZjcwMTI1Y2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaApAQCAtNTMsMTIgKzUzLDEy
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdHJ1ZSBmb3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wg
KHNlZSBIVE1MNC0xNy4xMy4yKS4KICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9y
bURhdGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBm
b3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9CisgICAgdm9pZCBmb3JtV2lsbEJlRGVzdHJv
eWVkKCk7CiAKICAgICB2b2lkIHJlc2V0Rm9ybU93bmVyKCk7CiAKIHByb3RlY3RlZDoKLSAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50Kik7CisgICAgRm9ybUFzc29jaWF0
ZWRFbGVtZW50KCk7CiAKICAgICB2b2lkIGluc2VydGVkSW50b1RyZWUoKTsKICAgICB2b2lkIHJl
bW92ZWRGcm9tVHJlZSgpOwpAQCAtNjYsMTAgKzY2LDE0IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERv
Y3VtZW50KiBvbGREb2N1bWVudCk7CiAKLSAgICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVtZW50
KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KLSAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7Cisg
ICAgdm9pZCBzZXRGb3JtKEhUTUxGb3JtRWxlbWVudCopOwogICAgIHZvaWQgZm9ybUF0dHJpYnV0
ZUNoYW5nZWQoKTsKIAorICAgIC8vIElmIHlvdSBhZGQgYW4gb3ZlcnJpZGUgb2Ygd2lsbENoYW5n
ZUZvcm0oKSBvciBkaWRDaGFuZ2VGb3JtKCkgdG8gYQorICAgIC8vIHN1YmNsYXNzLCB5b3UgbmVl
ZCB0byBhZGQgc2V0Rm9ybSgwKSB0byB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgc3ViY2xhc3MuCisg
ICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VGb3JtKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZUZvcm0oKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA3MWE0NDg0NGJjYjUzZTlmODJhOTUyMDU2
OWQ5YjI4ODdmMjNkNDE0Li5iMTNiMjU2NzYzMTk3ZDcyNzY5ODYwMzVhYjcwZGY0NDIyYTFkMDNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAK
QEAgLTUwLDcgKzUwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhU
TUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50
KGZvcm0pCiAgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9yZWFkT25seShmYWxzZSkK
ICAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCkBAIC02MSwxOCArNjAsMTIgQEAgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2MKICAgICAsIG1fd2FzQ2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdl
RXZlbnQoZmFsc2UpCiAgICAgLCBtX2hhc0F1dG9mb2N1c2VkKGZhbHNlKQogewotICAgIGlmICgh
dGhpcy0+Zm9ybSgpKQotICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7Ci0gICAg
aWYgKHRoaXMtPmZvcm0oKSkKLSAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVt
ZW50KHRoaXMpOwotCisgICAgc2V0Rm9ybShmb3JtID8gZm9ybSA6IGZpbmRGb3JtQW5jZXN0b3Io
KSk7CiAgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsKIH0KIAogSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQogewotICAgIGlmIChm
b3JtKCkpCi0gICAgICAgIGZvcm0oKS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CiB9CiAKIHZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGV0YWNoKCkKQEAgLTEwOCwxMSArMTAxLDkgQEAg
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0CiAKIHZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpIHsKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IGZvcm1BdHRyKQogICAgICAgICBmb3JtQXR0cmlidXRlQ2hhbmdlZCgp
OwotICAgICAgICBpZiAoIWZvcm0oKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gZGlzYWJsZWRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2Fi
bGVkQXR0cikgewogICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKICAgICAg
ICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKICAgICAgICAgaWYgKG9sZERpc2FibGVk
ICE9IG1fZGlzYWJsZWQpIHsKQEAgLTIwNSw5ICsxOTYsNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkKIHZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCiB7
CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKCk7Ci0gICAgaWYg
KCFmb3JtKCkpCi0gICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRC
dXR0b24odGhpcyk7Ci0KICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDM4NzU3ZDUx
ZWFiZTc3MzQ0NTE4N2UyMmNlZjBhOTQxZDEzOTM1NGMuLjkyYjY4NGE0ZWI1NTM1YTQ4OWViMzU5
NDc4NjQ3YzEyMWQ5NDYzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKQEAgLTk1LDcgKzk1LDcgQEAgSFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KCkK
ICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxs
YmFja3ModGhpcyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVk
RWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5m
b3JtRGVzdHJveWVkKCk7CisgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5mb3JtV2ls
bEJlRGVzdHJveWVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1hZ2VFbGVt
ZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgbV9pbWFnZUVsZW1lbnRzW2ldLT5tX2Zvcm0gPSAw
OwogfQpAQCAtNDU2LDE4ICs0NTYsMTEgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3Jt
RWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW0KIAogdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVt
ZW50KiBlKQogewotICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7Ci0gICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4oZSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRv
bnMoKS5yZW1vdmVCdXR0b24oZWxlbWVudCk7Ci0gICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9u
cy5hZGRCdXR0b24oZWxlbWVudCk7Ci0gICAgfQogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmlu
c2VydChmb3JtRWxlbWVudEluZGV4KGUpLCBlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlbW92ZUZvcm1FbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBpZiAo
ZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgbV9jaGVja2VkUmFkaW9CdXR0b25z
LnJlbW92ZUJ1dHRvbihzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZSkpOwog
ICAgIHVuc2lnbmVkIGluZGV4OwogICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAobV9hc3NvY2lhdGVk
RWxlbWVudHNbaW5kZXhdID09IGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAppbmRleCBmNWY0NzI5MTg2MWNmZTA5MTVlNWViNGU2YWU2MWU0NDA4ZDQ4OWY0Li4zYmI5
YWYwOTM3NTRlNjJmMjM4MWFhMzRlZDUzODljMTEyMmFjMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTExNiwxMSArMTE2LDkgQEAgSFRNTElucHV0RWxl
bWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFj
aygpKQogICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lv
bkNhbGxiYWNrcyh0aGlzKTsKIAotICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMo
KS5yZW1vdmVCdXR0b24odGhpcyk7Ci0KLSAgICAvLyBOZWVkIHRvIHJlbW92ZSB0aGlzIGZyb20g
dGhlIGZvcm0gd2hpbGUgaXQgaXMgc3RpbGwgYW4gSFRNTElucHV0RWxlbWVudCwKLSAgICAvLyBz
byBjYW4ndCB3YWl0IGZvciB0aGUgYmFzZSBjbGFzcydzIGRlc3RydWN0b3IgdG8gZG8gaXQuCi0g
ICAgcmVtb3ZlRnJvbUZvcm0oKTsKKyAgICAvLyBOZWVkIHRvIHJlbW92ZSBmb3JtIGFzc29jaWF0
aW9uIHdoaWxlIHRoaXMgaXMgc3RpbGwgYW4gSFRNTElucHV0RWxlbWVudAorICAgIC8vIHNvIHRo
YXQgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuCisgICAgc2V0Rm9ybSgw
KTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJv
bE5hbWUoKSBjb25zdApAQCAtMTc5LDggKzE3Nyw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6
c2hvdWxkQXV0b2NvbXBsZXRlKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVDaGVja2VkUmFkaW9CdXR0b25zKCkKIHsKLSAgICBpZiAoYXR0YWNoZWQoKSAmJiBjaGVja2Vk
KCkpCi0gICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAg
Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKIAogICAgIGlmIChmb3JtKCkp
IHsKICAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBjb250cm9s
cyA9IGZvcm0oKS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CkBAIC0xNTAyLDYgKzE0OTksMzIgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKQog
ICAgIHJlc2V0KCk7CiB9CiAKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6d2lsbENoYW5nZUZvcm0o
KQoreworICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxDaGFuZ2VGb3JtKCk7Cit9CisKK3ZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGlkQ2hhbmdlRm9ybSgpCit7CisgICAgSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRpZENoYW5nZUZvcm0oKTsKKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCku
YWRkQnV0dG9uKHRoaXMpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KCkKK3sKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoaW5Eb2N1bWVudCgpKTsKKyAgICBjaGVja2VkUmFk
aW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQoreworICAgIEFTU0VSVChpbkRvY3VtZW50KCkpOworICAg
IGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKK30KKwogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQp
CiB7CiAgICAgbV9pbnB1dFR5cGUtPndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDA1NDQzNmRkNDY3NjAyYzNlMTE5
OWZlNjhiZjk0ZjMwNTFiMjZlM2UuLmQyMTI0NGQzOWQ3NTJhMzYzYjJjN2E1ZTY5MmE1ZTkxMjEy
ZGVlNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNDksNiAr
MjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgZW51bSBBdXRvQ29tcGxldGVTZXR0aW5nIHsgVW5pbml0
aWFsaXplZCwgT24sIE9mZiB9OwogICAgIGVudW0gQW55U3RlcEhhbmRsaW5nIHsgUmVqZWN0QW55
LCBBbnlJc0RlZmF1bHRTdGVwIH07CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZUZvcm0o
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRm9ybSgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50Kikg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGU5
YmMzNmMyNDRhYWJhYjU2Mzk4MjBkNzYwMjc4M2U5OTBlM2FlZGQuLjNmOWY3N2ZiMjg3MTQ5Y2Ni
ZmVkZmRjNmUwMzA3YWJhNWY3ODA1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwCkBAIC01NSwyMSArNTUsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogaW5saW5lIEhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpIAogICAgIDogSFRNTFBsdWdJbkltYWdlRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyLCBTaG91bGROb3RQcmVmZXJQ
bHVnSW5zRm9ySW1hZ2VzKQotICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KGZvcm0pCiAgICAg
LCBtX2RvY05hbWVkSXRlbSh0cnVlKQogICAgICwgbV91c2VGYWxsYmFja0NvbnRlbnQoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0VGFnKSk7Ci0gICAgaWYgKCF0aGlzLT5m
b3JtKCkpCi0gICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKLSAgICBpZiAodGhp
cy0+Zm9ybSgpKQotICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CisgICAgc2V0Rm9ybShmb3JtID8gZm9ybSA6IGZpbmRGb3JtQW5jZXN0b3IoKSk7CiB9CiAK
IGlubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KCkKIHsKLSAgICBp
ZiAoZm9ybSgpKQotICAgICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogfQog
CiBQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZv
cm1FbGVtZW50KiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3YTMzNTQ2MzFk
ODBmOTVjZjQyZjUxNGNmOWNjYTNlMGZmNmM1YzA3Li41Mzc0YzNmYTA1OTkxNDI3YWY5NmI2Mjdl
MDFlNWQwOTlmZjEzZmFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMDQgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEEgcmFkaW8gYnV0dG9uIG5v
dCBpbiBhIERvY3VtZW50IHNob3VsZCBub3Qgam9pbiBhIHJhZGlvIGJ1dHRvbiBncm91cAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3MTkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZm9ybXMv
cmFkaW8vcmFkaW8tZ3JvdXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zv
cm1zL3JhZGlvL3JhZGlvLWdyb3VwLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTA5ICBEbWl0cnkg
VGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmViYXNl
bGluZSBhIGxvdCBvZiB0ZXN0cyB3aXRoIGlucHV0IGNvbnRyb2xzIGFmdGVyIHIxMDQ0OTQKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yYWRpby9yYWRpby1ncm91cC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGIwYjNjNTU0MDU4Yzg5MTI1ZjI0OTAxOWQ5MWZhZWFlYmM5OTdj
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8t
Z3JvdXAtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1ZhcmlvdXMgdGVzdHMgYWJvdXQg
cmFkaW8gYnV0dG9uIGdyb3VwLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2hh
bmdpbmcgdGhlIG5hbWUgYXR0cmlidXRlIG9mIGEgcmFkaW8gYnV0dG9uOgorUEFTUyAkKCJyYWRp
bzEtMSIpLmNoZWNrZWQgaXMgdHJ1ZQorUEFTUyAkKCJyYWRpbzEtMiIpLmNoZWNrZWQgaXMgdHJ1
ZQorUEFTUyAkKCJyYWRpbzEtMSIpLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgJCgicmFkaW8xLTIi
KS5jaGVja2VkIGlzIHRydWUKKworQ2hhbmdpbmcgdGhlIHR5cGUgb2YgYW4gaW5wdXQgZWxlbWVu
dCB0byByYWRpbzoKK1BBU1MgJCgicmFkaW8xLTEiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgi
cmFkaW8xLTEiKS5jaGVja2VkIGlzIGZhbHNlCitQQVNTICQoInRleHQxLTIiKS5jaGVja2VkIGlz
IHRydWUKKworTW92aW5nIGEgY2hlY2tlZCByYWRpbyBidXR0b24gdG8gYW5vdGhlciBmb3JtOgor
UEFTUyAkKCJvdXRzaWRlIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoImluc2lkZSIpLmNoZWNr
ZWQgaXMgdHJ1ZQorUEFTUyAkKCJpbnNpZGUyIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoIm91
dHNpZGUiKS5jaGVja2VkIGlzIHRydWUKK1BBU1MgJCgiaW5zaWRlIikuY2hlY2tlZCBpcyBmYWxz
ZQorUEFTUyAkKCJpbnNpZGUyIikuY2hlY2tlZCBpcyB0cnVlCitXaGVuIGEgcmFkaW8gaW4gYSBm
b3JtIGlzIHJlbW92ZWQsIGl0IHNob3VsZCBub3QgYWZmZWN0IERvY3VtZW50LWxldmVsIGdyb3Vw
czoKK1BBU1MgJCgib3V0c2lkZSIpLmNoZWNrZWQgaXMgdHJ1ZQorCitSZW1vdmluZyBhbiBhbmNl
c3RvciBvd25lciBmb3JtOgorUEFTUyAkKCJyYWRpbzAtMSIpLmNoZWNrZWQgaXMgdHJ1ZQorCitD
aGFuZ2luZyBmb3JtIGF0dHJpYnV0ZQorUEFTUyAkKCJyYWRpbzEtMSIpLmNoZWNrZWQgaXMgdHJ1
ZQorUEFTUyAkKCJyYWRpbzEtMiIpLmNoZWNrZWQgaXMgZmFsc2UKK1BBU1MgJCgicmFkaW8xLTMi
KS5jaGVja2VkIGlzIHRydWUKK1JlbW92aW5nIGEgbm9uLWFuY2VzdG9yIG93bmVyIGZvcm06CitQ
QVNTICQoInJhZGlvMS0zIikuY2hlY2tlZCBpcyB0cnVlCitQQVNTICQoInJhZGlvMS00IikuY2hl
Y2tlZCBpcyB0cnVlCisoVGhlIGZvbGxvd2luZyB0ZXN0IGRlcGVuZHMgb24gZ2MoKS4gSXQgbWln
aHQgZmFpbCBvbiBhIHJlYWwgYnJvd3Nlci4pCitQQVNTICQoInJhZGlvMS0xIikuY2hlY2tlZCBp
cyBmYWxzZQorUEFTUyAkKCJyYWRpbzEtMyIpLmNoZWNrZWQgaXMgdHJ1ZQorCitBZGRpbmcgYSBy
YWRpbyBidXR0b24gdG8gYW4gb3JwaGFuIHRyZWU6CitQQVNTIG9ycGhhbkRpdi5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkIGlzIHRydWUKK1BBU1Mgb3JwaGFuRGl2Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzFdLmNoZWNrZWQgaXMgdHJ1ZQorQWRkaW5nIHRo
ZSBvcnBoYW4gdHJlZSB0byBhIGRvY3VtZW50OgorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImlucHV0IilbMF0uY2hlY2tlZCBpcyBmYWxzZQorUEFTUyBvcnBoYW5EaXYuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMV0uY2hlY2tlZCBpcyB0cnVlCitQYXJzaW5nIGFu
IG9ycGhhbiBmb3JtOgorUEFTUyBvcnBoYW5EaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0
IilbMF0uY2hlY2tlZCBpcyB0cnVlCitQQVNTIG9ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiaW5wdXQiKVsxXS5jaGVja2VkIGlzIHRydWUKKworTW92aW5nIGEgcmFkaW8gYnV0dG9uIHRv
IGFub3RoZXIgRG9jdW1lbnQ6CitQQVNTIGRvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTIiKS5j
aGVja2VkIGlzIGZhbHNlCitQQVNTIGRvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVj
a2VkIGlzIHRydWUKK1BBU1MgZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIpLmNoZWNrZWQg
aXMgdHJ1ZQorCitDbG9uaW5nIGEgcmFkaW8gYnV0dG9uOgorUEFTUyBvcmlnaW5hbC5jaGVja2Vk
IGlzIHRydWUKK1BBU1MgY2xvbmVkUmFkaW8uY2hlY2tlZCBpcyB0cnVlCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWM4MDBhYWM2MDhm
YzVjNThjZjU4NThlMjQxYjFhMTQyMGM0NTMwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvcmFkaW8vcmFkaW8tZ3JvdXAuaHRtbApAQCAtMCwwICsxLDE0NSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJwYXJlbnQiPjwvZGl2PgorCis8
c2NyaXB0PgorZGVzY3JpcHRpb24oJ1ZhcmlvdXMgdGVzdHMgYWJvdXQgcmFkaW8gYnV0dG9uIGdy
b3VwLicpOworCitjb25zdCBDaGVja2VkID0gdHJ1ZTsKK2NvbnN0IFVuY2hlY2tlZCA9IGZhbHNl
OworCitmdW5jdGlvbiBjcmVhdGVSYWRpbyhuYW1lLCBjaGVja2VkLCBpZCkgeworICAgIHZhciBp
bnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgaW5wdXQudHlwZSA9
ICdyYWRpbyc7CisgICAgaW5wdXQubmFtZSA9IG5hbWU7CisgICAgaW5wdXQuY2hlY2tlZCA9ICEh
Y2hlY2tlZDsKKyAgICBpbnB1dC5pZCA9IGlkOworICAgIHJldHVybiBpbnB1dDsKK30KKworZnVu
Y3Rpb24gJChpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cit9
CisKK3ZhciBwYXJlbnQgPSAkKCdwYXJlbnQnKTsKKworZGVidWcoJ0NoYW5naW5nIHRoZSBuYW1l
IGF0dHJpYnV0ZSBvZiBhIHJhZGlvIGJ1dHRvbjonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGZv
cm0+JyArCisgICAgJzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1yYWRp
bzEtMT4nICsKKyAgICAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMiBjaGVja2VkIGlkPXJh
ZGlvMS0yPicgKworICAgICc8L2Zvcm0+JzsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTEiKS5j
aGVja2VkJyk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS0yIikuY2hlY2tlZCcpOworJCgncmFk
aW8xLTInKS5uYW1lID0gJ25hbWUxJzsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hl
Y2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMiIpLmNoZWNrZWQnKTsKKworZGVidWco
JycpOworZGVidWcoJ0NoYW5naW5nIHRoZSB0eXBlIG9mIGFuIGlucHV0IGVsZW1lbnQgdG8gcmFk
aW86Jyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxmb3JtPicgKworICAgICc8aW5wdXQgdHlwZT1y
YWRpbyBuYW1lPW5hbWUxIGNoZWNrZWQgaWQ9cmFkaW8xLTE+JyArCisgICAgJzxpbnB1dCB0eXBl
PXRleHQgbmFtZT1uYW1lMSBjaGVja2VkIGlkPXRleHQxLTI+JyArCisgICAgJzwvZm9ybT4nOwor
c2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMSIpLmNoZWNrZWQnKTsKKyQoJ3RleHQxLTInKS50eXBl
ID0gJ3JhZGlvJzsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hlY2tlZCcpOworc2hv
dWxkQmVUcnVlKCckKCJ0ZXh0MS0yIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
TW92aW5nIGEgY2hlY2tlZCByYWRpbyBidXR0b24gdG8gYW5vdGhlciBmb3JtOicpOworcGFyZW50
LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlk
PSJvdXRzaWRlIj4nICsKKyAgICAnPGZvcm0gaWQ9ImZvcm0xIj4nICsKKyAgICAnPGlucHV0IHR5
cGU9InJhZGlvIiBuYW1lPSJuYW1lMSIgY2hlY2tlZCBpZD0iaW5zaWRlIj4nICsKKyAgICAnPC9m
b3JtPicgKworICAgICc8Zm9ybSBpZD0iZm9ybTIiPicgKworICAgICc8aW5wdXQgdHlwZT0icmFk
aW8iIG5hbWU9Im5hbWUxIiBjaGVja2VkIGlkPSJpbnNpZGUyIj4nICsKKyAgICAnPC9mb3JtPicK
K3Nob3VsZEJlVHJ1ZSgnJCgib3V0c2lkZSIpLmNoZWNrZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgi
aW5zaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcp
OworJCgnZm9ybTEnKS5hcHBlbmRDaGlsZCgkKCdpbnNpZGUyJykpOworc2hvdWxkQmVUcnVlKCck
KCJvdXRzaWRlIikuY2hlY2tlZCcpOworc2hvdWxkQmVGYWxzZSgnJCgiaW5zaWRlIikuY2hlY2tl
ZCcpOworc2hvdWxkQmVUcnVlKCckKCJpbnNpZGUyIikuY2hlY2tlZCcpOworZGVidWcoJ1doZW4g
YSByYWRpbyBpbiBhIGZvcm0gaXMgcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBhZmZlY3QgRG9jdW1l
bnQtbGV2ZWwgZ3JvdXBzOicpOworcGFyZW50LnJlbW92ZUNoaWxkKCQoJ2Zvcm0xJykpOworc2hv
dWxkQmVUcnVlKCckKCJvdXRzaWRlIikuY2hlY2tlZCcpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
UmVtb3ZpbmcgYW4gYW5jZXN0b3Igb3duZXIgZm9ybTonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAn
PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMCBjaGVja2VkIGlkPXJhZGlvMC0xPicgKworICAg
ICc8Zm9ybSBpZD1mb3JtMT48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPW5hbWUwIGNoZWNrZWQgaWQ9
cmFkaW8wLTI+PC9mb3JtPic7CitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEnKSk7CitnYygp
Oworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzAtMSIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOwor
ZGVidWcoJ0NoYW5naW5nIGZvcm0gYXR0cmlidXRlJyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxp
bnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTEgY2hlY2tlZCBpZD1yYWRpbzEtMT4nICsKKyAgICAn
PGZvcm0gaWQ9Zm9ybTE+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT1uYW1lMSBjaGVja2VkIGlkPXJh
ZGlvMS0yPjwvZm9ybT4nICsKKyAgICAnPGZvcm0gaWQ9Zm9ybTI+PGlucHV0IHR5cGU9cmFkaW8g
bmFtZT1uYW1lMSBjaGVja2VkIGlkPXJhZGlvMS0zPjwvZm9ybT4nOworJCgncmFkaW8xLTMnKS5z
ZXRBdHRyaWJ1dGUoJ2Zvcm0nLCAnZm9ybTEnKTsKK3Nob3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTEi
KS5jaGVja2VkJyk7CitzaG91bGRCZUZhbHNlKCckKCJyYWRpbzEtMiIpLmNoZWNrZWQnKTsKK3No
b3VsZEJlVHJ1ZSgnJCgicmFkaW8xLTMiKS5jaGVja2VkJyk7CisKK2RlYnVnKCdSZW1vdmluZyBh
IG5vbi1hbmNlc3RvciBvd25lciBmb3JtOicpOworJCgnZm9ybTInKS5hcHBlbmRDaGlsZChjcmVh
dGVSYWRpbygnbmFtZTEnLCBDaGVja2VkLCAncmFkaW8xLTQnKSk7CitzaG91bGRCZVRydWUoJyQo
InJhZGlvMS0zIikuY2hlY2tlZCcpOworLy8gSWYgdGhlcmUgaXMgbm8gZWxlbWVudHMgd2l0aCBJ
RCBzcGVjaWZpZWQgYnkgZm9ybT0gYXR0cmlidXRlLCB0aGUgZm9ybQorLy8gY29udHJvbCBpcyBu
b3QgYXNzb2NpYXRlZCB0byBhbnkgZm9ybXMuCitwYXJlbnQucmVtb3ZlQ2hpbGQoJCgnZm9ybTEn
KSk7CisvLyBGSVhNRTogV2UgbmVlZCB0byBjYWxsIGdjKCkgdHdpY2Ugb24gQXBwbGUgTWFjLgor
Z2MoKTsKK2djKCk7CitzaG91bGRCZVRydWUoJyQoInJhZGlvMS00IikuY2hlY2tlZCcpOworZGVi
dWcoJyhUaGUgZm9sbG93aW5nIHRlc3QgZGVwZW5kcyBvbiBnYygpLiBJdCBtaWdodCBmYWlsIG9u
IGEgcmVhbCBicm93c2VyLiknKTsKK3Nob3VsZEJlRmFsc2UoJyQoInJhZGlvMS0xIikuY2hlY2tl
ZCcpOworc2hvdWxkQmVUcnVlKCckKCJyYWRpbzEtMyIpLmNoZWNrZWQnKTsKKworZGVidWcoJycp
OworZGVidWcoJ0FkZGluZyBhIHJhZGlvIGJ1dHRvbiB0byBhbiBvcnBoYW4gdHJlZTonKTsKK3Zh
ciBvcnBoYW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK29ycGhhbkRpdi5h
cHBlbmRDaGlsZChjcmVhdGVSYWRpbygnbmFtZTInLCBDaGVja2VkLCAnJykpOworb3JwaGFuRGl2
LmFwcGVuZENoaWxkKGNyZWF0ZVJhZGlvKCduYW1lMicsIENoZWNrZWQsICcnKSk7CitzaG91bGRC
ZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2Vk
Jyk7CitzaG91bGRCZVRydWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQi
KVsxXS5jaGVja2VkJyk7CitkZWJ1ZygnQWRkaW5nIHRoZSBvcnBoYW4gdHJlZSB0byBhIGRvY3Vt
ZW50OicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvcnBoYW5EaXYpOworc2hvdWxkQmVG
YWxzZSgnb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLmNoZWNrZWQn
KTsKK3Nob3VsZEJlVHJ1ZSgnb3JwaGFuRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIp
WzFdLmNoZWNrZWQnKTsKKworZGVidWcoJ1BhcnNpbmcgYW4gb3JwaGFuIGZvcm06Jyk7Citkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKG9ycGhhbkRpdik7CitvcnBoYW5EaXYuaW5uZXJIVE1MID0g
Jzxmb3JtPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9bmFtZTMgY2hlY2tlZD48aW5wdXQgdHlwZT1y
YWRpbyBuYW1lPW5hbWUzIGNoZWNrZWQ+PC9mb3JtPic7CitzaG91bGRCZVRydWUoJ29ycGhhbkRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5jaGVja2VkJyk7CitzaG91bGRCZVRy
dWUoJ29ycGhhbkRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsxXS5jaGVja2VkJyk7
CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdNb3ZpbmcgYSByYWRpbyBidXR0b24gdG8gYW5vdGhlciBE
b2N1bWVudDonKTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9cmFkaW8gbmFtZT1u
YW1lNCBjaGVja2VkIGlkPXJhZGlvNC0xPic7Cit2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50
YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7Citkb2MuYm9keS5pbm5lckhUTUwgPSAnPGlucHV0
IHR5cGU9cmFkaW8gbmFtZT1uYW1lNCBjaGVja2VkIGlkPXJhZGlvNC0yPic7Citkb2MuYm9keS5h
cHBlbmRDaGlsZChkb2MuYWRvcHROb2RlKCQoJ3JhZGlvNC0xJykpKTsKK3Nob3VsZEJlRmFsc2Uo
J2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTIiKS5jaGVja2VkJyk7CitzaG91bGRCZVRydWUo
J2RvYy5nZXRFbGVtZW50QnlJZCgicmFkaW80LTEiKS5jaGVja2VkJyk7CitwYXJlbnQuYXBwZW5k
Q2hpbGQoY3JlYXRlUmFkaW8oJ25hbWU0JywgQ2hlY2tlZCwgJycpKTsKK3Nob3VsZEJlVHJ1ZSgn
ZG9jLmdldEVsZW1lbnRCeUlkKCJyYWRpbzQtMSIpLmNoZWNrZWQnKTsKKworZGVidWcoJycpOwor
ZGVidWcoJ0Nsb25pbmcgYSByYWRpbyBidXR0b246Jyk7Cit2YXIgb3JpZ2luYWwgPSBjcmVhdGVS
YWRpbygnbmFtZTUnLCBDaGVja2VkLCAnJyk7CitwYXJlbnQuaW5uZXJIVE1MID0gJyc7CitwYXJl
bnQuYXBwZW5kQ2hpbGQob3JpZ2luYWwpOwordmFyIGNsb25lZFJhZGlvID0gb3JpZ2luYWwuY2xv
bmVOb2RlKHRydWUpOworc2hvdWxkQmVUcnVlKCdvcmlnaW5hbC5jaGVja2VkJyk7CitzaG91bGRC
ZVRydWUoJ2Nsb25lZFJhZGlvLmNoZWNrZWQnKTsKKworcGFyZW50LmlubmVySFRNTCA9ICcnOwor
ZGVidWcoJycpOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
</data>
<flag name="review"
          id="122401"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>