<?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>44013</bug_id>
          
          <creation_ts>2010-08-14 11:54:47 -0700</creation_ts>
          <short_desc>HTMLMediaElement should delay document load event</short_desc>
          <delta_ts>2011-01-24 12:19:41 -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>Media</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51249</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>abarth</cc>
    
    <cc>ademar</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>264720</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-14 11:54:47 -0700</bug_when>
    <thetext>The HTML5 spec requires that a media element with a potential source delay the document&apos;s load event until the media file fails to load or the readyState reaches HAVE_CURRENT_DATA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264722</commentid>
    <comment_count>1</comment_count>
      <attachid>64423</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-14 12:15:00 -0700</bug_when>
    <thetext>Created attachment 64423
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264789</commentid>
    <comment_count>2</comment_count>
      <attachid>64423</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-14 23:04:23 -0700</bug_when>
    <thetext>Comment on attachment 64423
proposed patch

Why is this going on Frame?  We already have this mechanism on Document.  It seems more like Document-related state than Frame-related state...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264935</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-15 22:22:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64423 [details])
&gt; Why is this going on Frame?  We already have this mechanism on Document.  
The existing mechanism to prevent the Document &apos;load&apos; event is DocLoader::incrementRequestCount. We could piggyback on that, but it is used by other methods where we don&apos;t want media loading to be considered, eg. DocumentLoader::isLoadingInAPISense, FrameView::checkStopDelayingDeferredRepaints, Loader::cancelRequests, etc.

&gt; It seems more like Document-related state than Frame-related state...
Fair enough, the methods do make more sense on Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264939</commentid>
    <comment_count>4</comment_count>
      <attachid>64466</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-15 22:44:47 -0700</bug_when>
    <thetext>Created attachment 64466
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265120</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-16 08:43:26 -0700</bug_when>
    <thetext>Ignore the change to WebCore.xcodeproj, it is unnecessary and I will remove it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265558</commentid>
    <comment_count>6</comment_count>
      <attachid>64466</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-17 08:28:02 -0700</bug_when>
    <thetext>Comment on attachment 64466
proposed patch

Eric asked me over irc if this patch counted as &quot;pooping&quot; on Document (per the webkit-dev thread).  It does, sorta.  But no more than any of hundreds of patches which came before it, each adding just one member and one function. :)  Eventually one of us has to pay the piper and refactor Document into smaller pieces.  Including clearly one class who&apos;s job it is to dispatch load events and handle all the state associated with them.  If someone wanted to do that refactoring before this patch, that&apos;d be great.  But I&apos;m certainly not going to stand in the way of this patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265735</commentid>
    <comment_count>7</comment_count>
      <attachid>64466</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-17 13:40:22 -0700</bug_when>
    <thetext>Comment on attachment 64466
proposed patch

&gt; +    , m_elementsBlockingLoad(0)

The name for this data member is not great. It contains a count, not elements, so it&apos;s not good that it&apos;s named &quot;elements&quot;.

&gt; +void Document::setDelayLoadEvent(bool delay)

I don&apos;t like the name for this. It makes it sound like it sets something named &quot;delay load event&quot;. But it doesn&apos;t. It actually bumps a count. And it&apos;s important that it&apos;s clear from the caller&apos;s point of view that each call to delay is balanced by a call to cancel the delay. I suggest having two functions instead of one, maybe one with the names add/remove or register/unregister or added/removed.

&gt; +    if (!frame() || !frame()-&gt;loader())
&gt; +        return;

There is no need to check frame()-&gt;loader() for 0. Every frame always has a loader.

I think you also need a comment that says that a document is either always in a frame or never, to make it clear this does not dynamically change.

&gt; +    // Used to allow element that loads data without using a FrameLoader to delay the &apos;load&apos; event.
&gt; +    void setDelayLoadEvent(bool);
&gt; +    bool isDelayingLoadEvent() const { return m_elementsBlockingLoad; }

It seems unfortunate to have to add a new mechanism for this that is unrelated to the other loading, and also a bit far away. Perhaps this counter can go into a loading-related object instead of the document. I&apos;m thinking DocumentLoader would be a good place for it. That way you wouldn&apos;t have to touch Document.h at all.

&gt; +    if (m_delayingTheLoadEvent)
&gt; +        setDelayLoadEvent(false);

There&apos;s no need for the if statement here. The setDelayLoadEvent already does that check. Same issue in the HTMLMediaElement destructor.

&gt; +    // The spec doesn&apos;t say to block the load event until we actually run the asynchronous section
&gt; +    // algorithm, but do it now because we won&apos;t start that until after the timer fires and the 
&gt; +    // event may have already fired by then.
&gt; +    setDelayLoadEvent(true);
&gt; +
&gt;  }

You should remove that extra blank line here.

&gt; +void HTMLMediaElement::setDelayLoadEvent(bool delay)

I think this should be named setShouldDelayLoadEvent.

&gt; +    if (m_delayingTheLoadEvent == delay || !delay &amp;&amp; !m_delayingTheLoadEvent)
&gt; +        return;

There&apos;s no need for the second part of this expression. It&apos;s already covered by the first half.

&gt; +    m_delayingTheLoadEvent = delay;

I think this should be named m_shouldDelayLoadEvent.

This looks good and is probably nearly OK to land already, but I had enough minor nitpick comments that I think I&apos;ll say review- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265736</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-17 13:40:47 -0700</bug_when>
    <thetext>Document is a better place than Frame, but probably DocumentLoader is even better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265737</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-17 13:41:38 -0700</bug_when>
    <thetext>However, I don’t see an easy way to get from the Document to its DocumentLoader, so that might be a slight snag in the plan. Leaving it on Document would not be the end of the world. (Note that I am saying DocumentLoader, not DocLoader.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266922</commentid>
    <comment_count>10</comment_count>
      <attachid>64894</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-19 13:21:19 -0700</bug_when>
    <thetext>Created attachment 64894
updated patch

(In reply to comment #7)
&gt; (From update of attachment 64466 [details])
&gt; &gt; +    , m_elementsBlockingLoad(0)
&gt; 
&gt; The name for this data member is not great. It contains a count, not elements, so it&apos;s not good that it&apos;s named &quot;elements&quot;.
&gt; 
I ended up using m_loadEventDelayCount,

&gt; &gt; +void Document::setDelayLoadEvent(bool delay)
&gt; 
&gt; I don&apos;t like the name for this. It makes it sound like it sets something named &quot;delay load event&quot;. But it doesn&apos;t. It actually bumps a count. And it&apos;s important that it&apos;s clear from the caller&apos;s point of view that each call to delay is balanced by a call to cancel the delay. I suggest having two functions instead of one, maybe one with the names add/remove or register/unregister or added/removed.
&gt; 
I changed the method names to incrementLoadEventDelayCount and decrementLoadEventDelayCount.

&gt; &gt; +    // Used to allow element that loads data without using a FrameLoader to delay the &apos;load&apos; event.
&gt; &gt; +    void setDelayLoadEvent(bool);
&gt; &gt; +    bool isDelayingLoadEvent() const { return m_elementsBlockingLoad; }
&gt; 
&gt; It seems unfortunate to have to add a new mechanism for this that is unrelated to the other loading, and also a bit far away. Perhaps this counter can go into a loading-related object instead of the document. I&apos;m thinking DocumentLoader would be a good place for it. That way you wouldn&apos;t have to touch Document.h at all.
&gt; 
I tried this, but the DocumentLoader is sometimes NULL when the element needs to change the delay count (depending on the timing of the media engine state changes), so I ended up leaving it on Document for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268934</commentid>
    <comment_count>11</comment_count>
      <attachid>64894</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-24 17:48:36 -0700</bug_when>
    <thetext>Comment on attachment 64894
updated patch

&gt; +    // Used to allow element that loads data without using a FrameLoader to delay the &apos;load&apos; event.

I think you mean without using a ResourceLoader. Or without going through the FrameLoader.

&gt; +    // Still waiting for elements that don&apos;t use a FrameLoader?

Same comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268935</commentid>
    <comment_count>12</comment_count>
      <attachid>64894</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-08-24 17:52:08 -0700</bug_when>
    <thetext>Comment on attachment 64894
updated patch

&gt; @@ -140,6 +139,7 @@ HTMLMediaElement::~HTMLMediaElement()
&gt;  {
&gt;      if (m_isWaitingUntilMediaCanStart)
&gt;          document()-&gt;removeMediaCanStartListener(this);
&gt; +    setShouldDelayLoadEvent(false);
&gt;      document()-&gt;unregisterForDocumentActivationCallbacks(this);
&gt;      document()-&gt;unregisterForMediaVolumeCallbacks(this);
&gt;  }

WebCore/html/HTMLMediaElement.cpp:145
 +  }
Is it really right to have this in the destructor? Perhaps it should be in removedFromDocument.Reasons for thinking so: 

(1) In general it&apos;s a good idea to minimize the amount of substantive work that goes on in the destructor.
(2) Media elements that are not in the document should not (I think) delay the load event.

Otherwise looks ok, so r=me assuming the above is either fixed or has a good reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269841</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-26 06:00:09 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 64894 [details])
&gt; &gt; @@ -140,6 +139,7 @@ HTMLMediaElement::~HTMLMediaElement()
&gt; &gt;  {
&gt; &gt;      if (m_isWaitingUntilMediaCanStart)
&gt; &gt;          document()-&gt;removeMediaCanStartListener(this);
&gt; &gt; +    setShouldDelayLoadEvent(false);
&gt; &gt;      document()-&gt;unregisterForDocumentActivationCallbacks(this);
&gt; &gt;      document()-&gt;unregisterForMediaVolumeCallbacks(this);
&gt; &gt;  }
&gt; 
&gt; WebCore/html/HTMLMediaElement.cpp:145
&gt;  +  }
&gt; Is it really right to have this in the destructor? Perhaps it should be in removedFromDocument.Reasons for thinking so: 
&gt; 
&gt; (1) In general it&apos;s a good idea to minimize the amount of substantive work that goes on in the destructor.
&gt; (2) Media elements that are not in the document should not (I think) delay the load event.
&gt; 
&gt; Otherwise looks ok, so r=me assuming the above is either fixed or has a good reason.

The spec doesn&apos;t specify different behavior when an element is not in the document. I checked with Hixie and he confirmed that this is by design, media and image elements should delay the load event even when they are not in the document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269930</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-26 09:51:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269952</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-26 10:41:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66110 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270002</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-26 11:41:48 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 64894 [details] [details])
&gt; &gt; Is it really right to have this in the destructor? Perhaps it should be in removedFromDocument.Reasons for thinking so: 
&gt; &gt; 
&gt; &gt; (1) In general it&apos;s a good idea to minimize the amount of substantive work that goes on in the destructor.
&gt; &gt; (2) Media elements that are not in the document should not (I think) delay the load event.
&gt; &gt; 
&gt; &gt; Otherwise looks ok, so r=me assuming the above is either fixed or has a good reason.
&gt; 
&gt; The spec doesn&apos;t specify different behavior when an element is not in the document. I checked with Hixie and he confirmed that this is by design, media and image elements should delay the load event even when they are not in the document.

The destructor will be called when the last reference to the media element goes away; that includes JavaScript wrappers that go away when garbage collection triggers. It doesn’t make sense to me that a media element would trigger a load event (stop delaying it) when the last wrapper to it is garbage collected; that&apos;s essentially an unpredictable time. So there must be a well-defined time to stop delaying the load event other than the actual destruction of the media element. If it’s not removal from the document it still must be some other kind of well-defined time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270385</commentid>
    <comment_count>17</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-27 01:56:12 -0700</bug_when>
    <thetext>Eric, that also broke media/video-source-error.html.
I&apos;m adding it to the platform/mac/Skipped file, which already lists a bunch of tests (that you are working on, I suppose):

# Skipped while Eric Carlson works on a fix.
# https://bugs.webkit.org/show_bug.cgi?id=28221
fast/layers/video-layer.html
media/audio-delete-while-step-button-clicked.html
media/video-controls-transformed.html
media/video-controls-zoomed.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324799</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-20 22:31:25 -0800</bug_when>
    <thetext>Please track regressions with a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339185</commentid>
    <comment_count>19</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-01-24 12:19:41 -0800</bug_when>
    <thetext>Revision r66110 cherry-picked into qtwebkit-2.2 with commit 4733735 &lt;http://gitorious.org/webkit/qtwebkit/commit/4733735&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64423</attachid>
            <date>2010-08-14 12:15:00 -0700</date>
            <delta_ts>2010-08-15 22:44:47 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch_3.txt</filename>
            <type>text/plain</type>
            <size>19918</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDgtMTQgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MDEzCisgICAgICAg
IEhUTUxNZWRpYUVsZW1lbnQgc2hvdWxkIGRlbGF5IGRvY3VtZW50IGxvYWQgZXZlbnQKKworICAg
ICAgICBUZXN0OiBtZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0bWwKKworICAgICAgICAq
IGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVudCk6IFN0b3AgZGVsYXlpbmcgdGhlIGxvYWQgZXZlbnQg
aWYgbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2lsbE1v
dmVUb05ld093bmVyRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQpOiBEZWxheSB0aGUgbG9hZCBldmVu
dCBpZiB3ZSBkb24ndCB0aGUKKyAgICAgICAgbWV0YSBkYXRhIGZvciB0aGUgbW92aWUgeWV0Lgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQpOiBEZWxh
eSB0aGUgbG9hZCBldmVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNl
bGVjdE1lZGlhUmVzb3VyY2UpOiBEb24ndCBkZWxheSB0aGUgbG9hZCBldmVudCB3aGVuIHRoZXJl
IGFyZSAKKyAgICAgICAgbm8gbW9yZSBzb3VyY2VzIHRvIGNvbnNpZGVyLiBEb24ndCBjaGFuZ2Ug
bV9kZWxheWluZ1RoZUxvYWRFdmVudCBkaXJlY3RseSwgY2FsbCAKKyAgICAgICAgc2V0RGVsYXlM
b2FkRXZlbnQoKSBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
d2FpdEZvclNvdXJjZUNoYW5nZSk6IFN0b3AgZGVsYXlpbmcgdGhlIGxvYWQgZXZlbnQuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpub25lU3VwcG9ydGVkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYUVuZ2luZUVycm9yKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1c2VyQ2FuY2VsbGVk
TG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0RGVs
YXlMb2FkRXZlbnQpOiBOZXcsIGNhbGwgZnJhbWUtPnNldERlbGF5TG9hZEV2ZW50KCkuCisgICAg
ICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVk
KTogU2VlIGlmIHRoZSBmcmFtZSB3YW50cyB0byBkZWxheSBjb21wbGV0ZSBmb3IgZWxlbWVudHMK
KyAgICAgICAgdGhhdCBkb24ndCB1c2UgYSBGcmFtZUxvYWRlci4KKworICAgICAgICAqIHBhZ2Uv
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZyYW1lKTogSW5pdGlhbGl6ZSBt
X2VsZW1lbnRzQmxvY2tpbmdMb2FkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERlbGF5
TG9hZEV2ZW50KTogTmV3LCBpbmNyZW1lbnQvZGVjcmVtZW50IG1fZWxlbWVudHNCbG9ja2luZ0xv
YWQgYW5kCisgICAgICAgIGNhbGwgbG9hZGVyLT5jaGVja0NvbXBsZXRlZCgpIHdoZW4gaXQgcmVh
Y2hlcyB6ZXJvLgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjppc0RlbGF5aW5nTG9hZEV2ZW50KTogTmV3LgorCiAyMDEwLTA4LTE0ICBSb2IgQnVpcyAg
PHJ3bGJ1aXNAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4K
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDY1MzI0KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiAr
MTQwLDggQEAgSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQoKQogewogICAgIGlm
IChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQoKS0+cmVt
b3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgIGlmIChtX2RlbGF5aW5nVGhlTG9h
ZEV2ZW50KQorICAgICAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKICAgICBk
b2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhpcyk7CiB9CkBA
IC0xNDgsNiArMTUwLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3du
ZQogewogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9j
dW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgIGlmIChtX2Rl
bGF5aW5nVGhlTG9hZEV2ZW50KQorICAgICAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiAg
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0
aGlzKTsKICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3Mo
dGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CkBA
IC0xNTcsNiArMTYxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25l
cgogewogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9j
dW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgIGlmIChtX3JlYWR5
U3RhdGUgPCBIQVZFX0NVUlJFTlRfREFUQSkKKyAgICAgICAgc2V0RGVsYXlMb2FkRXZlbnQodHJ1
ZSk7CiAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFj
a3ModGhpcyk7CiAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNr
cyh0aGlzKTsKICAgICBIVE1MRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwpA
QCAtNTQ3LDYgKzU1MywxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JMb2Fk
KCkKICAgICBtX3BsYXllZFRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKICAgICBt
X2xhc3RTZWVrVGltZSA9IDA7CiAgICAgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgPSBmYWxzZTsK
KworICAgIC8vIFRoZSBzcGVjIGRvZXNuJ3Qgc2F5IHRvIGJsb2NrIHRoZSBsb2FkIGV2ZW50IHVu
dGlsIHdlIGFjdHVhbGx5IHJ1biB0aGUgYXN5bmNocm9ub3VzIHNlY3Rpb24KKyAgICAvLyBhbGdv
cml0aG0sIGJ1dCBkbyBpdCBub3cgYmVjYXVzZSB3ZSB3b24ndCBzdGFydCB0aGF0IHVudGlsIGFm
dGVyIHRoZSB0aW1lciBmaXJlcyBhbmQgdGhlIAorICAgIC8vIGV2ZW50IG1heSBoYXZlIGFscmVh
ZHkgZmlyZWQgYnkgdGhlbi4KKyAgICBzZXREZWxheUxvYWRFdmVudCh0cnVlKTsKKwogfQogCiB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCkBAIC01ODAsMTggKzU5MiwxOSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAKICAgICAgICAgaWYg
KCFub2RlKSB7CiAgICAgICAgICAgICBtX2xvYWRTdGF0ZSA9IFdhaXRpbmdGb3JTb3VyY2U7Cisg
ICAgICAgICAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAgICAgICAgICAgIC8vIC4u
LiBzZXQgdGhlIG5ldHdvcmtTdGF0ZSB0byBORVRXT1JLX0VNUFRZLCBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMKICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19FTVBUWTsKLSAgICAg
ICAgICAgIEFTU0VSVCghbV9kZWxheWluZ1RoZUxvYWRFdmVudCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBtb2RlID0gY2hpbGRyZW47CiAgICAgfQogCi0gICAg
Ly8gNAotICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSB0cnVlOworICAgIC8vIDQgLSBTZXQg
dGhlIG1lZGlhIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIHRydWUg
KHRoaXMgZGVsYXlzIHRoZSBsb2FkIGV2ZW50KSwgCisgICAgLy8gYW5kIHNldCBpdHMgbmV0d29y
a1N0YXRlIHRvIE5FVFdPUktfTE9BRElORy4KKyAgICBzZXREZWxheUxvYWRFdmVudCh0cnVlKTsK
ICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTE9BRElORzsKIAogICAgIC8vIDUKQEAgLTcx
NSw3ICs3MjgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndhaXRGb3JTb3VyY2VDaGFuCiAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NPVVJDRTsKIAogICAgIC8vIDYuMTggLSBT
ZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBU
aGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2Fk
RXZlbnQgPSBmYWxzZTsKKyAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiB9CiAKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bm9uZVN1cHBvcnRlZCgpCkBAIC03MzgsNyArNzUxLDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpub25lU3VwcG9ydGVkKCkKICAgICBzY2hlZHVsZUV2ZW50KGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIAogICAgIC8vIDggLSBTZXQgdGhlIGVsZW1lbnQncyBk
ZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5n
IHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAg
ICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAgICAvLyA5IC1BYm9ydCB0aGVzZSBzdGVw
cy4gVW50aWwgdGhlIGxvYWQoKSBtZXRob2QgaXMgaW52b2tlZCwgdGhlIGVsZW1lbnQgd29uJ3Qg
YXR0ZW1wdCB0byBsb2FkIGFub3RoZXIgcmVzb3VyY2UuCiAKQEAgLTc1OCw4ICs3NzEsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhRW5naW5lRXJyb3IoCiAgICAgLy8gc2V0IHRvIE1F
RElBX0VSUl9ORVRXT1JLL01FRElBX0VSUl9ERUNPREUuCiAgICAgbV9lcnJvciA9IGVycjsKIAot
ICAgIC8vIDMgLSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBl
cnJvciBhdCB0aGUgbWVkaWEgZWxlbWVudCwgaW4KLSAgICAvLyB0aGUgY29udGV4dCBvZiB0aGUg
ZmV0Y2hpbmcgcHJvY2VzcyBzdGFydGVkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgdGhpcyBhbGdvcml0
aG0uCisgICAgLy8gMyAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVk
IGVycm9yIGF0IHRoZSBtZWRpYSBlbGVtZW50LgogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQpOwogCiAgICAgLy8gNCAtIFNldCB0aGUgZWxlbWVudCdzIG5ldHdvcmtT
dGF0ZSBhdHRyaWJ1dGUgdG8gdGhlIE5FVFdPUktfRU1QVFkgdmFsdWUgYW5kIHF1ZXVlIGEKQEAg
LTc2OCw3ICs3ODAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhRW5naW5lRXJyb3Io
CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZW1wdGllZEV2ZW50KTsKIAogICAgIC8v
IDUgLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZh
bHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdU
aGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAg
ICAvLyA2IC0gQWJvcnQgdGhlIG92ZXJhbGwgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4K
ICAgICBtX2N1cnJlbnRTb3VyY2VOb2RlID0gMDsKQEAgLTkxNSwyMSArOTI3LDE2IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWQKICAgICAgICAgc2NoZWR1bGVFdmVu
dChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRhdGFFdmVudCk7CiAgICAgICAgIGlmIChyZW5kZXJl
cigpKQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAg
ICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9IGZhbHNlOwogICAgICAgICBtX3BsYXllci0+c2Vl
aygwKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSA9IGZhbHNl
OwogCi0gICAgLy8gNC44LjEwLjcgc2F5cyBsb2FkZWRkYXRhIGlzIHNlbnQgb25seSB3aGVuIHRo
ZSBuZXcgc3RhdGUgKmlzKiBIQVZFX0NVUlJFTlRfREFUQTogIklmIHRoZQotICAgIC8vIHByZXZp
b3VzIHJlYWR5IHN0YXRlIHdhcyBIQVZFX01FVEFEQVRBIGFuZCB0aGUgbmV3IHJlYWR5IHN0YXRl
IGlzIEhBVkVfQ1VSUkVOVF9EQVRBIiwgCi0gICAgLy8gYnV0IHRoZSBldmVudCB0YWJsZSBhdCB0
aGUgZW5kIG9mIHRoZSBzcGVjIHNheXMgaXQgaXMgc2VudCB3aGVuOiAicmVhZHlTdGF0ZSBuZXds
eSAKLSAgICAvLyBpbmNyZWFzZWQgdG8gSEFWRV9DVVJSRU5UX0RBVEEgIG9yIGdyZWF0ZXIgZm9y
IHRoZSBmaXJzdCB0aW1lIgotICAgIC8vIFdlIGdvIHdpdGggdGhlIGxhdGVyIGJlY2F1c2UgaXQg
c2VlbXMgdXNlZnVsIHRvIGNvdW50IG9uIGdldHRpbmcgdGhpcyBldmVudAogICAgIGlmIChtX3Jl
YWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0NVUlJFTlRf
REFUQSAmJiAhbV9oYXZlRmlyZWRMb2FkZWREYXRhKSB7CiAgICAgICAgIG1faGF2ZUZpcmVkTG9h
ZGVkRGF0YSA9IHRydWU7CiAgICAgICAgIHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSA9IHRydWU7
CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZGRhdGFFdmVudCk7Cisg
ICAgICAgIHNldERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKICAgICB9CiAKICAgICBib29sIGlzUG90
ZW50aWFsbHlQbGF5aW5nID0gcG90ZW50aWFsbHlQbGF5aW5nKCk7CkBAIC0xODE4LDEzICsxODI1
LDEyIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQKICAgICAvLyAy
IC0gU2V0IHRoZSBlcnJvciBhdHRyaWJ1dGUgdG8gYSBuZXcgTWVkaWFFcnJvciBvYmplY3Qgd2hv
c2UgY29kZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE1FRElBX0VSUl9BQk9SVEVELgogICAgIG1fZXJy
b3IgPSBNZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQpOwog
Ci0gICAgLy8gMyAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVk
IGFib3J0IGF0IHRoZSBtZWRpYSBlbGVtZW50LCBpbiB0aGUgY29udGV4dAotICAgIC8vIG9mIHRo
ZSBmZXRjaGluZyBwcm9jZXNzIHN0YXJ0ZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiB0aGlzIGFsZ29y
aXRobS4KKyAgICAvLyAzIC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFt
ZWQgZXJyb3IgYXQgdGhlIG1lZGlhIGVsZW1lbnQuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5h
bWVzKCkuYWJvcnRFdmVudCk7CiAKLSAgICAvLyA1IC0gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyBy
ZWFkeVN0YXRlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSBlcXVhbCB0byBIQVZFX05PVEhJTkcsIHNl
dCB0aGUKLSAgICAvLyBlbGVtZW50J3MgbmV0d29ya1N0YXRlIGF0dHJpYnV0ZSB0byB0aGUgTkVU
V09SS19FTVBUWSB2YWx1ZSBhbmQgcXVldWUgYSB0YXNrIHRvIGZpcmUgYQotICAgIC8vIHNpbXBs
ZSBldmVudCBjYWxsZWQgZW1wdGllZCBhdCB0aGUgZWxlbWVudC4gT3RoZXJ3aXNlLCBzZXQgc2V0
IHRoZSBlbGVtZW50J3MgbmV0d29ya1N0YXRlCisgICAgLy8gNCAtIElmIHRoZSBtZWRpYSBlbGVt
ZW50J3MgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgZXF1YWwgdG8gSEFWRV9OT1RI
SU5HLCBzZXQgdGhlIAorICAgIC8vIGVsZW1lbnQncyBuZXR3b3JrU3RhdGUgYXR0cmlidXRlIHRv
IHRoZSBORVRXT1JLX0VNUFRZIHZhbHVlIGFuZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIAorICAg
IC8vIHNpbXBsZSBldmVudCBuYW1lZCBlbXB0aWVkIGF0IHRoZSBlbGVtZW50LiBPdGhlcndpc2Us
IHNldCB0aGUgZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSAKICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhl
IE5FVFdPUktfSURMRSB2YWx1ZS4KICAgICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfTk9USElO
RykgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfRU1QVFk7CkBAIC0xODMzLDEw
ICsxODM5LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQKICAg
ICBlbHNlCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19JRExFOwogCi0gICAgLy8g
NiAtIFNldCB0aGUgZWxlbWVudCdzIGRlbGF5aW5nLXRoZS1sb2FkLWV2ZW50IGZsYWcgdG8gZmFs
c2UuIFRoaXMgc3RvcHMgZGVsYXlpbmcgdGhlIGxvYWQgZXZlbnQuCi0gICAgbV9kZWxheWluZ1Ro
ZUxvYWRFdmVudCA9IGZhbHNlOworICAgIC8vIDUgLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWlu
Zy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBs
b2FkIGV2ZW50LgorICAgIHNldERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKIAotICAgIC8vIDcgLSBB
Ym9ydCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgorICAgIC8vIDYg
LSBBYm9ydCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgogICAgIG1f
Y3VycmVudFNvdXJjZU5vZGUgPSAwOwogCiAgICAgLy8gUmVzZXQgbV9yZWFkeVN0YXRlIHNpbmNl
IG1fcGxheWVyIGlzIGdvbmUuCkBAIC0yMDg3LDYgKzIwOTMsMTkgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdAogICAgIHJldHVybiBhdHRyaWJ1dGUtPm5hbWUoKSA9
PSBzcmNBdHRyOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldERlbGF5TG9hZEV2ZW50
KGJvb2wgZGVsYXkpCit7CisgICAgaWYgKG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPT0gZGVsYXkg
fHwgIWRlbGF5ICYmICFtX2RlbGF5aW5nVGhlTG9hZEV2ZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9IGRlbGF5OworICAgIAorICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGZyYW1lLT5zZXREZWxheUxvYWRFdmVudChkZWxheSk7Cit9CisgICAgCiB9
CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA2NTE3OSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
MSw3ICsxODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZW51bSBEaXNwbGF5TW9kZSB7IFVua25vd24s
IE5vbmUsIFBvc3RlciwgVmlkZW8gfTsKICAgICBEaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheU1vZGU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzcGxh
eU1vZGUoRGlzcGxheU1vZGUgbW9kZSkgeyBtX2Rpc3BsYXlNb2RlID0gbW9kZTsgfQotCisgICAg
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGls
ZCk7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJv
b2wgcHJlc2VydmVEZWNscyk7CkBAIC0yODEsNiArMjgxLDggQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgdm9pZCBtZWRpYUNhblN0YXJ0KCk7CiAKKyAgICB2b2lkIHNldERlbGF5TG9hZEV2ZW50
KGJvb2wpOworCiAgICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNoYW5nZSBkZWZhdWx0IGJlaGF2aW9y
cy4gVGhpcyBpcyBlZmZlY3RpdmVseSBhIGNvbXBpbGUgdGltZSBjaG9pY2UgYXQgdGhlIG1vbWVu
dAogICAgIC8vIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGFjY2Vzc29yIGZ1bmN0aW9ucy4KICAgICBl
bnVtIEJlaGF2aW9yUmVzdHJpY3Rpb25zIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDY1MTc5KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MzEsNiArODMxLDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxl
dGVkKCkKICAgICBpZiAobnVtUmVxdWVzdHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIC8vIFN0aWxsIHdhaXRpbmcgZm9yIGVsZW1lbnRzIHRoYXQgZG9uJ3Qg
dXNlIGEgRnJhbWVMb2FkZXI/CisgICAgaWYgKG1fZnJhbWUtPmlzRGVsYXlpbmdMb2FkRXZlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gT0ssIGNvbXBsZXRlZC4KICAgICBtX2lzQ29t
cGxldGUgPSB0cnVlOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDY1MTc5KQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIGlubGluZSBG
cmFtZTo6RnJhbWUoUGFnZSogcGFnZSwgSFRNTEZyYW0KICNpZiBFTkFCTEUoT1JJRU5UQVRJT05f
RVZFTlRTKQogICAgICwgbV9vcmllbnRhdGlvbigwKQogI2VuZGlmCisgICAgLCBtX2VsZW1lbnRz
QmxvY2tpbmdMb2FkKDApCiAgICAgLCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKGZhbHNlKQogICAg
ICwgbV9pblZpZXdTb3VyY2VNb2RlKGZhbHNlKQogICAgICwgbV9uZWVkc1JlYXBwbHlTdHlsZXMo
ZmFsc2UpCkBAIC0xNjE4LDQgKzE2MTksMTggQEAgU3RyaW5nIEZyYW1lOjpsYXllclRyZWVBc1Rl
eHQoKSBjb25zdAogI2VuZGlmCiB9CiAKK3ZvaWQgRnJhbWU6OnNldERlbGF5TG9hZEV2ZW50KGJv
b2wgZGVsYXkpCit7CisgICAgaWYgKGRlbGF5KSB7CisgICAgICAgICsrbV9lbGVtZW50c0Jsb2Nr
aW5nTG9hZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2VsZW1lbnRz
QmxvY2tpbmdMb2FkKTsKKyAgICAtLW1fZWxlbWVudHNCbG9ja2luZ0xvYWQ7CisgICAgaWYgKCFt
X2VsZW1lbnRzQmxvY2tpbmdMb2FkKQorICAgICAgICBtX2xvYWRlci5jaGVja0NvbXBsZXRlZCgp
OworfQorICAgCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24g
NjUxNzkpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYg
KzEyNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgaW5qZWN0VXNlclNj
cmlwdHMoVXNlclNjcmlwdEluamVjdGlvblRpbWUpOwogICAgICAgICAKICAgICAgICAgU3RyaW5n
IGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgLy8gVXNlZCB0byBh
bGxvdyBlbGVtZW50IHRoYXQgbG9hZHMgZGF0YSB3aXRob3V0IHVzaW5nIGEgRnJhbWVMb2FkZXIg
dG8gZGVsYXkgdGhlICdsb2FkJyBldmVudC4KKyAgICAgICAgdm9pZCBzZXREZWxheUxvYWRFdmVu
dChib29sKTsKKyAgICAgICAgYm9vbCBpc0RlbGF5aW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50c0Jsb2NraW5nTG9hZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCosIGNvbnN0IFVzZXJT
Y3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSk7CkBAIC0zMzUsNiArMzM5LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV9vcmllbnRhdGlvbjsKICNlbmRp
ZgogCisgICAgICAgIGludCBtX2VsZW1lbnRzQmxvY2tpbmdMb2FkOworCiAgICAgICAgIGJvb2wg
bV9oaWdobGlnaHRUZXh0TWF0Y2hlczsKICAgICAgICAgYm9vbCBtX2luVmlld1NvdXJjZU1vZGU7
CiAgICAgICAgIGJvb2wgbV9uZWVkc1JlYXBwbHlTdHlsZXM7CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
NTM3MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDEwLTA4LTE0ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDAxMworICAgICAgICBIVE1MTWVk
aWFFbGVtZW50IHNob3VsZCBkZWxheSBkb2N1bWVudCBsb2FkIGV2ZW50CisKKyAgICAgICAgKiBt
ZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogbWVkaWEvdmlkZW8tZGVsYXktbG9hZC1ldmVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBt
ZWRpYS92aWRlby1sYXllci1jcmFzaC5odG1sOiBUcmlnZ2VyIHRlc3Qgd2l0aCBzY3JpcHQgaW5s
aW5lIGluIHRoZSA8Ym9keT4gaW5zdGVhZAorICAgICAgICBvZiBmcm9tIGFuIG9ubG9hZCBoYW5k
bGVyIGFzIHRoYXQgcnVucyB0b28gbGF0ZS4gUmVmb3JtYXQgc2NyaXB0IHRvIG1ha2UgaXQgcmVh
ZGFibGUuCisKIDIwMTAtMDgtMTQgIFJvYiBCdWlzICA8cndsYnVpc0BnbWFpbC5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEv
dmlkZW8tZGVsYXktbG9hZC1ldmVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvbWVkaWEvdmlkZW8tZGVsYXktbG9hZC1ldmVudC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorIAorVGVzdCB0aGUgZG9jdW1lbnQn
cyBsb2FkIGV2ZW50IGlzIGRlbGF5ZWQgdW50aWwgYSBtb3ZpZSdzIG1ldGEgZGF0YSBpcyBhdmFp
bGFibGUuCisKKworaW5saW5lIHNjcmlwdAorbm8gJ3NyYycuCitFWFBFQ1RFRCAodmlkZW8ubmV0
d29ya1N0YXRlID09ICcwJykgT0sKK0VYUEVDVEVEICh2aWRlby5yZWFkeVN0YXRlID09ICcwJykg
T0sKKword2l0aCAnc3JjJyBhdHRyaWJ1dGUuCitFWFBFQ1RFRCAodmlkZW8ubmV0d29ya1N0YXRl
ID09ICczJykgT0sKK0VYUEVDVEVEICh2aWRlby5yZWFkeVN0YXRlID09ICcwJykgT0sKKword2l0
aCA8c291cmNlPiBlbGVtZW50LgorRVhQRUNURUQgKHZpZGVvLm5ldHdvcmtTdGF0ZSA9PSAnMycp
IE9LCitFWFBFQ1RFRCAodmlkZW8ucmVhZHlTdGF0ZSA9PSAnMCcpIE9LCisKK2RvY3VtZW50ICds
b2FkJyBldmVudCBoYW5kbGVyCitubyAnc3JjJy4KK0VYUEVDVEVEICh2aWRlby5uZXR3b3JrU3Rh
dGUgPT0gJzAnKSBPSworRVhQRUNURUQgKHZpZGVvLnJlYWR5U3RhdGUgPT0gJzAnKSBPSworCit3
aXRoICdzcmMnIGF0dHJpYnV0ZS4KK0VYUEVDVEVEICh2aWRlby5uZXR3b3JrU3RhdGUgIT0gJzMn
KSBPSworRVhQRUNURUQgKHZpZGVvLm5ldHdvcmtTdGF0ZSA+PSAnMScpIE9LCitFWFBFQ1RFRCAo
dmlkZW8ucmVhZHlTdGF0ZSA+PSAnMicpIE9LCisKK3dpdGggPHNvdXJjZT4gZWxlbWVudC4KK0VY
UEVDVEVEICh2aWRlby5uZXR3b3JrU3RhdGUgIT0gJzMnKSBPSworRVhQRUNURUQgKHZpZGVvLm5l
dHdvcmtTdGF0ZSA+PSAnMScpIE9LCitFWFBFQ1RFRCAodmlkZW8ucmVhZHlTdGF0ZSA+PSAnMicp
IE9LCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWRlbGF5LWxvYWQtZXZlbnQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1kZWxheS1sb2Fk
LWV2ZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKzwhZG9jdHlwZSBodG1s
PgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5kZWxheSBkb2N1bWVudCAnbG9h
ZCcgZXZlbnQgdGVzdDwvdGl0bGU+CisgICAgICAgIDxzdHlsZT4gdmlkZW8geyBib3JkZXI6IDNw
eCBzb2xpZCByZWQ7IH0gPC9zdHlsZT4KKyAgICAgICAgPHNjcmlwdCBzcmM9dmlkZW8tdGVzdC5q
cz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4K
KyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIHZhciB2aWRlbzsKKworICAgICAgICAgICAg
ZnVuY3Rpb24gdGVzdE1vdmllV2l0aE5vU291cmNlKGVsZW0pCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdmlkZW8gPSBlbGVtOyAgIC8vIE5lZWQgaXQgaW4gYSBnbG9iYWwgZm9yIHRl
c3RFeHBlY3RlZCgpIHRvIHNlZSBpdC4KKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxl
bT5ubyAnc3JjJy48L2VtPiIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8u
bmV0d29ya1N0YXRlIiwgSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19FTVBUWSwg
Ij09Iik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5yZWFkeVN0YXRlIiwg
SFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuSEFWRV9OT1RISU5HLCAiPT0iKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gdGVzdE1vdmllV2l0aFNvdXJjZShlbGVtLCBo
YXNMb2FkZWQsIG1zZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2aWRlbyA9IGVs
ZW07ICAgLy8gTmVlZCBpdCBpbiBhIGdsb2JhbCBmb3IgdGVzdEV4cGVjdGVkKCkgdG8gc2VlIGl0
LgorICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZShtc2cpOworICAgICAgICAgICAgICAgIGlm
IChoYXNMb2FkZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG1vdmllIHNob3VsZCBo
YXZlIGxvYWRlZCBhdCBsZWFzdCB0byBIQVZFX0NVUlJFTlRfREFUQQorICAgICAgICAgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLm5ldHdvcmtTdGF0ZSIsIEhUTUxNZWRpYUVsZW1lbnQu
cHJvdG90eXBlLk5FVFdPUktfTk9fU09VUkNFLCAiIT0iKTsKKyAgICAgICAgICAgICAgICAgICAg
dGVzdEV4cGVjdGVkKCJ2aWRlby5uZXR3b3JrU3RhdGUiLCBIVE1MTWVkaWFFbGVtZW50LnByb3Rv
dHlwZS5ORVRXT1JLX0lETEUsICI+PSIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInZpZGVvLnJlYWR5U3RhdGUiLCBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5IQVZFX0NV
UlJFTlRfREFUQSwgIj49Iik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5uZXR3b3JrU3RhdGUiLCBIVE1MTWVkaWFFbGVt
ZW50LnByb3RvdHlwZS5ORVRXT1JLX05PX1NPVVJDRSwgIj09Iik7CisgICAgICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ucmVhZHlTdGF0ZSIsIEhUTUxNZWRpYUVsZW1lbnQucHJv
dG90eXBlLkhBVkVfTk9USElORywgIj09Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGJyPjxiPmRvY3VtZW50IDxlbT4nbG9hZCc8IiAr
ICIvZW0+IGV2ZW50IGhhbmRsZXI8L2I+Iik7CisKKyAgICAgICAgICAgICAgICB0ZXN0TW92aWVX
aXRoTm9Tb3VyY2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLTEnKSk7CisgICAgICAg
ICAgICAgICAgdGVzdE1vdmllV2l0aFNvdXJjZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlk
ZW8tMicpLCB0cnVlLCAiPGJyPjxlbT53aXRoICdzcmMnIGF0dHJpYnV0ZS48L2VtPiIpOworICAg
ICAgICAgICAgICAgIHRlc3RNb3ZpZVdpdGhTb3VyY2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3ZpZGVvLTMnKSwgdHJ1ZSwgIjxicj48ZW0+d2l0aCAmbHQ7c291cmNlJmd0OyBlbGVtZW50Ljwv
ZW0+Iik7CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9k
eSBvbmxvYWQ9ImxvYWRlZCgpIj4KKyAgICAgICAgPHZpZGVvIGlkPSJ2aWRlby0xIj48L3ZpZGVv
PgorICAgICAgICA8dmlkZW8gaWQ9InZpZGVvLTIiPjwvdmlkZW8+CisgICAgICAgIDx2aWRlbyBp
ZD0idmlkZW8tMyI+PHNvdXJjZSBpZD0ic291cmNlLTEiPjwvdmlkZW8+CisKKyAgICAgICAgPHA+
VGVzdCB0aGUgZG9jdW1lbnQncyBsb2FkIGV2ZW50IGlzIGRlbGF5ZWQgdW50aWwgYSBtb3ZpZSdz
IG1ldGEgZGF0YSBpcyBhdmFpbGFibGUuPC9wPgorCisgICAgICAgIDxzY3JpcHQ+CisgICAgICAg
ICAgICBjb25zb2xlV3JpdGUoIjxicj48Yj5pbmxpbmUgc2NyaXB0PC9iPiIpOworCisgICAgICAg
ICAgICB0ZXN0TW92aWVXaXRoTm9Tb3VyY2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVv
LTEnKSk7CisKKyAgICAgICAgICAgIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Zp
ZGVvLTInKTsKKyAgICAgICAgICAgIHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwg
ImNvbnRlbnQvdGVzdCIpOworICAgICAgICAgICAgdGVzdE1vdmllV2l0aFNvdXJjZSh2aWRlbywg
ZmFsc2UsICI8YnI+PGVtPndpdGggJ3NyYycgYXR0cmlidXRlLjwvZW0+Iik7CisKKyAgICAgICAg
ICAgIHNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UtMScpOworICAgICAg
ICAgICAgc291cmNlLnNyYyA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgImNvbnRlbnQvdGVzdCIp
OworICAgICAgICAgICAgdGVzdE1vdmllV2l0aFNvdXJjZShkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndmlkZW8tMycpLCBmYWxzZSwgIjxicj48ZW0+d2l0aCAmbHQ7c291cmNlJmd0OyBlbGVtZW50
LjwvZW0+Iik7CisgICAgICAgIDwvc2NyaXB0PgorCisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tbGF5ZXItY3Jhc2guaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1sYXllci1jcmFzaC5odG1sCShyZXZpc2lvbiA2NTE3
OSkKKysrIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWxheWVyLWNyYXNoLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTIgKzEsMjAgQEAKLTxzY3JpcHQgc3JjPSJtZWRpYS1maWxlLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSJ2aWRlby1wYWludC10ZXN0LmpzIj48L3NjcmlwdD4KLTxib2R5
IG9ubG9hZD0iZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnb25lJykpOyBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7IGluaXQoKSI+Ci08c3R5bGU+Ci12
aWRlbyB7IHdpZHRoOjIwMHB4OyBib3JkZXI6IDNweCBzb2xpZCByZWQ7IC13ZWJraXQtYm94LXJl
ZmxlY3Q6IGJlbG93IDVweDsgfQotPC9zdHlsZT4KLTxwPlRlc3QgZHluYW1pYyByZW1vdmFsIG9m
IHRyYW5zZm9ybWVkIGFuZCByZWZsZWN0ZWQgdmlkZW8gPC9wPgotJm5ic3A7PHZpZGVvIGlkPSJv
bmUiIHN0eWxlPSItd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMjBkZWcpIj48L3ZpZGVvPjxicj4K
LSZuYnNwOzx2aWRlbyBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC41KSI+PC92aWRl
bz48YnI+Ci0mbmJzcDs8dmlkZW8gc3R5bGU9Ii13ZWJraXQtdHJhbnNmb3JtOnNrZXcoMjBkZWcp
Ij48L3ZpZGVvPjxicj4KLTxzY3JpcHQ+c2V0U3JjQnlUYWdOYW1lKCd2aWRlbycsIGZpbmRNZWRp
YUZpbGUoJ3ZpZGVvJywgJ2NvbnRlbnQvdGVzdCcpKTwvc2NyaXB0PgotPC9ib2R5PgorPGh0bWw+
CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtZWRpYS1maWxlLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InZpZGVvLXBhaW50LXRlc3QuanMiPjwvc2NyaXB0Pgor
ICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICB2aWRlbyB7IHdpZHRoOjIwMHB4OyBib3JkZXI6
IDNweCBzb2xpZCByZWQ7IC13ZWJraXQtYm94LXJlZmxlY3Q6IGJlbG93IDVweDsgfQorICAgICAg
ICA8L3N0eWxlPgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHA+VGVzdCBkeW5h
bWljIHJlbW92YWwgb2YgdHJhbnNmb3JtZWQgYW5kIHJlZmxlY3RlZCB2aWRlbyA8L3A+CisgICAg
ICAgICZuYnNwOzx2aWRlbyBpZD0ib25lIiBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06cm90YXRl
KDIwZGVnKSI+PC92aWRlbz48YnI+CisgICAgICAgICZuYnNwOzx2aWRlbyBzdHlsZT0iLXdlYmtp
dC10cmFuc2Zvcm06c2NhbGUoMC41KSI+PC92aWRlbz48YnI+CisgICAgICAgICZuYnNwOzx2aWRl
byBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06c2tldygyMGRlZykiPjwvdmlkZW8+PGJyPgorICAg
ICAgICA8c2NyaXB0PgorICAgICAgICAgICAgc2V0U3JjQnlUYWdOYW1lKCd2aWRlbycsIGZpbmRN
ZWRpYUZpbGUoJ3ZpZGVvJywgJ2NvbnRlbnQvdGVzdCcpKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uZScpKTsgZG9jdW1l
bnQuYm9keS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgaW5pdCgpOworICAgICAgICA8L3Njcmlw
dD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="52989"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64466</attachid>
            <date>2010-08-15 22:44:47 -0700</date>
            <delta_ts>2010-08-19 13:21:19 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch_4.txt</filename>
            <type>text/plain</type>
            <size>20626</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTM5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDgtMTUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAg
ICBUZXN0OiBtZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0bWwKKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOiBJ
bml0aWFsaXplIG1fZWxlbWVudHNCbG9ja2luZ0xvYWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0RGVsYXlMb2FkRXZlbnQpOiBOZXcsIGluY3JlbWVudC9kZWNyZW1lbnQgbV9lbGVt
ZW50c0Jsb2NraW5nTG9hZCBhbmQKKyAgICAgICAgY2FsbCBsb2FkZXItPmNoZWNrQ29tcGxldGVk
KCkgd2hlbiBpdCByZWFjaGVzIHplcm8uCisgICAgICAgICogcGFnZS9Eb2N1bWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzRGVsYXlpbmdMb2FkRXZlbnQpOiBOZXcuCisKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQpOiBTdG9wIGRlbGF5aW5nIHRoZSBsb2Fk
IGV2ZW50IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KTogRGVsYXkgdGhlIGxv
YWQgZXZlbnQgaWYgd2UgZG9uJ3QgdGhlCisgICAgICAgIG1ldGEgZGF0YSBmb3IgdGhlIG1vdmll
IHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JMb2Fk
KTogRGVsYXkgdGhlIGxvYWQgZXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKTogRG9uJ3QgZGVsYXkgdGhlIGxvYWQgZXZlbnQgd2hl
biB0aGVyZSBhcmUgCisgICAgICAgIG5vIG1vcmUgc291cmNlcyB0byBjb25zaWRlci4gRG9uJ3Qg
Y2hhbmdlIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgZGlyZWN0bHksIGNhbGwgCisgICAgICAgIHNl
dERlbGF5TG9hZEV2ZW50KCkgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OndhaXRGb3JTb3VyY2VDaGFuZ2UpOiBTdG9wIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bm9uZVN1cHBvcnRlZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFFbmdpbmVFcnJv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlT
dGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXNlckNh
bmNlbGxlZExvYWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnNldERlbGF5TG9hZEV2ZW50KTogTmV3LCBjYWxsIGZyYW1lLT5zZXREZWxheUxvYWRFdmVudCgp
LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0Nv
bXBsZXRlZCk6IFNlZSBpZiB0aGUgZG9jdW1lbnQgd2FudHMgdG8gZGVsYXkgY29tcGxldGUgZm9y
IGVsZW1lbnRzCisgICAgICAgIHRoYXQgZG9uJ3QgdXNlIGEgRnJhbWVMb2FkZXIuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tDYWxsSW1wbGljaXRDbG9zZSk6IERpdHRvCisg
ICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisKIDIwMTAtMDgtMTUgIFJ5dWFuIENob2kgIDxyeXVh
bi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMu
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjUxNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjAyMDEsNyArMjAyMDEsNiBAQAogCQkJaXNhID0gUEJYUHJvamVj
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsK
IAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJl
Z2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3du
UmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjUxNzkp
CisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw2ICs0
MDYsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAjZW5kaWYK
ICAgICAsIG1fd2Vha1JlZmVyZW5jZShEb2N1bWVudFdlYWtSZWZlcmVuY2U6OmNyZWF0ZSh0aGlz
KSkKICAgICAsIG1faWRBdHRyaWJ1dGVOYW1lKGlkQXR0cikKKyAgICAsIG1fZWxlbWVudHNCbG9j
a2luZ0xvYWQoMCkKIHsKICAgICBtX2RvY3VtZW50ID0gdGhpczsKIApAQCAtNTAzMiw2ICs1MDMz
LDIzIEBAIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogRG9jdW1lbnQ6OnRha2VBbnkKICAgICByZXR1
cm4gbGlzdGVuZXI7CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OnNldERlbGF5TG9hZEV2ZW50KGJvb2wg
ZGVsYXkpCit7CisgICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFtZSgpLT5sb2FkZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGRlbGF5KSB7CisgICAgICAgICsrbV9lbGVtZW50c0Jsb2Nr
aW5nTG9hZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQobV9lbGVt
ZW50c0Jsb2NraW5nTG9hZCk7CisgICAgLS1tX2VsZW1lbnRzQmxvY2tpbmdMb2FkOworICAgIGlm
ICghbV9lbGVtZW50c0Jsb2NraW5nTG9hZCkKKyAgICAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNo
ZWNrQ29tcGxldGVkKCk7Cit9CisKKyAgICAKICNpZiBFTkFCTEUoWEhUTUxNUCkKIGJvb2wgRG9j
dW1lbnQ6OmlzWEhUTUxNUERvY3VtZW50KCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24g
NjUxNzkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE1
LDcgKzEwMTUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOwogICAgIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExp
c3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOwogICAgIE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciogdGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpOwotCisgICAgCisgICAgLy8gVXNlZCB0
byBhbGxvdyBlbGVtZW50IHRoYXQgbG9hZHMgZGF0YSB3aXRob3V0IHVzaW5nIGEgRnJhbWVMb2Fk
ZXIgdG8gZGVsYXkgdGhlICdsb2FkJyBldmVudC4KKyAgICB2b2lkIHNldERlbGF5TG9hZEV2ZW50
KGJvb2wpOworICAgIGJvb2wgaXNEZWxheWluZ0xvYWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudHNCbG9ja2luZ0xvYWQ7IH0KKyAgICAKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBp
ZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lkQXR0cmlidXRlTmFtZTsgfQogCiAg
ICAgYm9vbCB3cml0ZURpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV93cml0ZURpc2FibGVkOyB9
CkBAIC0xMzAyLDYgKzEzMDYsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8TWVkaWFDYW5TdGFy
dExpc3RlbmVyKj4gbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzOwogCiAgICAgUXVhbGlmaWVkTmFt
ZSBtX2lkQXR0cmlidXRlTmFtZTsKKworICAgIGludCBtX2VsZW1lbnRzQmxvY2tpbmdMb2FkOwog
fTsKIAogaW5saW5lIGJvb2wgRG9jdW1lbnQ6Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5n
SW1wbCogaWQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NTMyNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVt
ZW50KCkKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAg
IGRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICBpZiAo
bV9kZWxheWluZ1RoZUxvYWRFdmVudCkKKyAgICAgICAgc2V0RGVsYXlMb2FkRXZlbnQoZmFsc2Up
OwogICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFj
a3ModGhpcyk7CiAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJh
Y2tzKHRoaXMpOwogfQpAQCAtMTQ4LDYgKzE1MCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
d2lsbE1vdmVUb05ld093bmUKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQpCiAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlz
KTsKKyAgICBpZiAobV9kZWxheWluZ1RoZUxvYWRFdmVudCkKKyAgICAgICAgc2V0RGVsYXlMb2Fk
RXZlbnQoZmFsc2UpOwogICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3ModGhpcyk7CiAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvck1lZGlh
Vm9sdW1lQ2FsbGJhY2tzKHRoaXMpOwogICAgIEhUTUxFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpOwpAQCAtMTU3LDYgKzE2MSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
ZGlkTW92ZVRvTmV3T3duZXIKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQpCiAgICAgICAgIGRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsK
KyAgICBpZiAobV9yZWFkeVN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEpCisgICAgICAgIHNldERl
bGF5TG9hZEV2ZW50KHRydWUpOwogICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRB
Y3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwogICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yTWVk
aWFWb2x1bWVDYWxsYmFja3ModGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKQEAgLTU0Nyw2ICs1NTMsMTIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgbV9wbGF5ZWRUaW1lUmFuZ2VzID0gVGltZVJhbmdlczo6
Y3JlYXRlKCk7CiAgICAgbV9sYXN0U2Vla1RpbWUgPSAwOwogICAgIG1fY2xvc2VkQ2FwdGlvbnNW
aXNpYmxlID0gZmFsc2U7CisKKyAgICAvLyBUaGUgc3BlYyBkb2Vzbid0IHNheSB0byBibG9jayB0
aGUgbG9hZCBldmVudCB1bnRpbCB3ZSBhY3R1YWxseSBydW4gdGhlIGFzeW5jaHJvbm91cyBzZWN0
aW9uCisgICAgLy8gYWxnb3JpdGhtLCBidXQgZG8gaXQgbm93IGJlY2F1c2Ugd2Ugd29uJ3Qgc3Rh
cnQgdGhhdCB1bnRpbCBhZnRlciB0aGUgdGltZXIgZmlyZXMgYW5kIHRoZSAKKyAgICAvLyBldmVu
dCBtYXkgaGF2ZSBhbHJlYWR5IGZpcmVkIGJ5IHRoZW4uCisgICAgc2V0RGVsYXlMb2FkRXZlbnQo
dHJ1ZSk7CisKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkSW50ZXJuYWwoKQpAQCAt
NTgwLDE4ICs1OTIsMTkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291
cgogCiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBXYWl0
aW5nRm9yU291cmNlOworICAgICAgICAgICAgc2V0RGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCiAg
ICAgICAgICAgICAvLyAuLi4gc2V0IHRoZSBuZXR3b3JrU3RhdGUgdG8gTkVUV09SS19FTVBUWSwg
YW5kIGFib3J0IHRoZXNlIHN0ZXBzCiAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdP
UktfRU1QVFk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZGVsYXlpbmdUaGVMb2FkRXZlbnQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgbW9kZSA9IGNoaWxkcmVu
OwogICAgIH0KIAotICAgIC8vIDQKLSAgICBtX2RlbGF5aW5nVGhlTG9hZEV2ZW50ID0gdHJ1ZTsK
KyAgICAvLyA0IC0gU2V0IHRoZSBtZWRpYSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZl
bnQgZmxhZyB0byB0cnVlICh0aGlzIGRlbGF5cyB0aGUgbG9hZCBldmVudCksIAorICAgIC8vIGFu
ZCBzZXQgaXRzIG5ldHdvcmtTdGF0ZSB0byBORVRXT1JLX0xPQURJTkcuCisgICAgc2V0RGVsYXlM
b2FkRXZlbnQodHJ1ZSk7CiAgICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7CiAK
ICAgICAvLyA1CkBAIC03MTUsNyArNzI4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3YWl0
Rm9yU291cmNlQ2hhbgogICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7CiAK
ICAgICAvLyA2LjE4IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQg
ZmxhZyB0byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KLSAgICBt
X2RlbGF5aW5nVGhlTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgc2V0RGVsYXlMb2FkRXZlbnQoZmFs
c2UpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om5vbmVTdXBwb3J0ZWQoKQpAQCAtNzM4
LDcgKzc1MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bm9uZVN1cHBvcnRlZCgpCiAgICAg
c2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CiAKICAgICAvLyA4IC0gU2V0
IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxhZyB0byBmYWxzZS4gVGhp
cyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KLSAgICBtX2RlbGF5aW5nVGhlTG9hZEV2
ZW50ID0gZmFsc2U7CisgICAgc2V0RGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCiAgICAgLy8gOSAt
QWJvcnQgdGhlc2Ugc3RlcHMuIFVudGlsIHRoZSBsb2FkKCkgbWV0aG9kIGlzIGludm9rZWQsIHRo
ZSBlbGVtZW50IHdvbid0IGF0dGVtcHQgdG8gbG9hZCBhbm90aGVyIHJlc291cmNlLgogCkBAIC03
NTgsOCArNzcxLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUVuZ2luZUVycm9yKAog
ICAgIC8vIHNldCB0byBNRURJQV9FUlJfTkVUV09SSy9NRURJQV9FUlJfREVDT0RFLgogICAgIG1f
ZXJyb3IgPSBlcnI7CiAKLSAgICAvLyAzIC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVz
cyBldmVudCBjYWxsZWQgZXJyb3IgYXQgdGhlIG1lZGlhIGVsZW1lbnQsIGluCi0gICAgLy8gdGhl
IGNvbnRleHQgb2YgdGhlIGZldGNoaW5nIHByb2Nlc3Mgc3RhcnRlZCBieSB0aGlzIGluc3RhbmNl
IG9mIHRoaXMgYWxnb3JpdGhtLgorICAgIC8vIDMgLSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBlcnJvciBhdCB0aGUgbWVkaWEgZWxlbWVudC4KICAgICBzY2hlZHVs
ZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIAogICAgIC8vIDQgLSBTZXQgdGhlIGVs
ZW1lbnQncyBuZXR3b3JrU3RhdGUgYXR0cmlidXRlIHRvIHRoZSBORVRXT1JLX0VNUFRZIHZhbHVl
IGFuZCBxdWV1ZSBhCkBAIC03NjgsNyArNzgwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpt
ZWRpYUVuZ2luZUVycm9yKAogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmVtcHRpZWRF
dmVudCk7CiAKICAgICAvLyA1IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQt
ZXZlbnQgZmxhZyB0byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4K
LSAgICBtX2RlbGF5aW5nVGhlTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgc2V0RGVsYXlMb2FkRXZl
bnQoZmFsc2UpOwogCiAgICAgLy8gNiAtIEFib3J0IHRoZSBvdmVyYWxsIHJlc291cmNlIHNlbGVj
dGlvbiBhbGdvcml0aG0uCiAgICAgbV9jdXJyZW50U291cmNlTm9kZSA9IDA7CkBAIC05MTUsMjEg
KzkyNywxNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkCiAgICAg
ICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRhRXZlbnQpOwogICAg
ICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7Ci0gICAgICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxzZTsKICAgICAg
ICAgbV9wbGF5ZXItPnNlZWsoMCk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVEaXNw
bGF5U3RhdGUgPSBmYWxzZTsKIAotICAgIC8vIDQuOC4xMC43IHNheXMgbG9hZGVkZGF0YSBpcyBz
ZW50IG9ubHkgd2hlbiB0aGUgbmV3IHN0YXRlICppcyogSEFWRV9DVVJSRU5UX0RBVEE6ICJJZiB0
aGUKLSAgICAvLyBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMgSEFWRV9NRVRBREFUQSBhbmQgdGhl
IG5ldyByZWFkeSBzdGF0ZSBpcyBIQVZFX0NVUlJFTlRfREFUQSIsIAotICAgIC8vIGJ1dCB0aGUg
ZXZlbnQgdGFibGUgYXQgdGhlIGVuZCBvZiB0aGUgc3BlYyBzYXlzIGl0IGlzIHNlbnQgd2hlbjog
InJlYWR5U3RhdGUgbmV3bHkgCi0gICAgLy8gaW5jcmVhc2VkIHRvIEhBVkVfQ1VSUkVOVF9EQVRB
ICBvciBncmVhdGVyIGZvciB0aGUgZmlyc3QgdGltZSIKLSAgICAvLyBXZSBnbyB3aXRoIHRoZSBs
YXRlciBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCB0byBjb3VudCBvbiBnZXR0aW5nIHRoaXMgZXZl
bnQKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRBICYmIG9sZFN0YXRl
IDwgSEFWRV9DVVJSRU5UX0RBVEEgJiYgIW1faGF2ZUZpcmVkTG9hZGVkRGF0YSkgewogICAgICAg
ICBtX2hhdmVGaXJlZExvYWRlZERhdGEgPSB0cnVlOwogICAgICAgICBzaG91bGRVcGRhdGVEaXNw
bGF5U3RhdGUgPSB0cnVlOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2Fk
ZWRkYXRhRXZlbnQpOworICAgICAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAgfQog
CiAgICAgYm9vbCBpc1BvdGVudGlhbGx5UGxheWluZyA9IHBvdGVudGlhbGx5UGxheWluZygpOwpA
QCAtMTgxOCwxMyArMTgyNSwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJDYW5jZWxs
ZWRMb2FkCiAgICAgLy8gMiAtIFNldCB0aGUgZXJyb3IgYXR0cmlidXRlIHRvIGEgbmV3IE1lZGlh
RXJyb3Igb2JqZWN0IHdob3NlIGNvZGUgYXR0cmlidXRlIGlzIHNldCB0byBNRURJQV9FUlJfQUJP
UlRFRC4KICAgICBtX2Vycm9yID0gTWVkaWFFcnJvcjo6Y3JlYXRlKE1lZGlhRXJyb3I6Ok1FRElB
X0VSUl9BQk9SVEVEKTsKIAotICAgIC8vIDMgLSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dy
ZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGUgbWVkaWEgZWxlbWVudCwgaW4gdGhlIGNvbnRl
eHQKLSAgICAvLyBvZiB0aGUgZmV0Y2hpbmcgcHJvY2VzcyBzdGFydGVkIGJ5IHRoaXMgaW5zdGFu
Y2Ugb2YgdGhpcyBhbGdvcml0aG0uCisgICAgLy8gMyAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEg
c2ltcGxlIGV2ZW50IG5hbWVkIGVycm9yIGF0IHRoZSBtZWRpYSBlbGVtZW50LgogICAgIHNjaGVk
dWxlRXZlbnQoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogCi0gICAgLy8gNSAtIElmIHRoZSBt
ZWRpYSBlbGVtZW50J3MgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgZXF1YWwgdG8g
SEFWRV9OT1RISU5HLCBzZXQgdGhlCi0gICAgLy8gZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSBhdHRy
aWJ1dGUgdG8gdGhlIE5FVFdPUktfRU1QVFkgdmFsdWUgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJl
IGEKLSAgICAvLyBzaW1wbGUgZXZlbnQgY2FsbGVkIGVtcHRpZWQgYXQgdGhlIGVsZW1lbnQuIE90
aGVyd2lzZSwgc2V0IHNldCB0aGUgZWxlbWVudCdzIG5ldHdvcmtTdGF0ZQorICAgIC8vIDQgLSBJ
ZiB0aGUgbWVkaWEgZWxlbWVudCdzIHJlYWR5U3RhdGUgYXR0cmlidXRlIGhhcyBhIHZhbHVlIGVx
dWFsIHRvIEhBVkVfTk9USElORywgc2V0IHRoZSAKKyAgICAvLyBlbGVtZW50J3MgbmV0d29ya1N0
YXRlIGF0dHJpYnV0ZSB0byB0aGUgTkVUV09SS19FTVBUWSB2YWx1ZSBhbmQgcXVldWUgYSB0YXNr
IHRvIGZpcmUgYSAKKyAgICAvLyBzaW1wbGUgZXZlbnQgbmFtZWQgZW1wdGllZCBhdCB0aGUgZWxl
bWVudC4gT3RoZXJ3aXNlLCBzZXQgdGhlIGVsZW1lbnQncyBuZXR3b3JrU3RhdGUgCiAgICAgLy8g
YXR0cmlidXRlIHRvIHRoZSBORVRXT1JLX0lETEUgdmFsdWUuCiAgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBIQVZFX05PVEhJTkcpIHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0VN
UFRZOwpAQCAtMTgzMywxMCArMTgzOSwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJD
YW5jZWxsZWRMb2FkCiAgICAgZWxzZQogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktf
SURMRTsKIAotICAgIC8vIDYgLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1l
dmVudCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50Lgot
ICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICAvLyA1IC0gU2V0IHRoZSBl
bGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxhZyB0byBmYWxzZS4gVGhpcyBzdG9w
cyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KKyAgICBzZXREZWxheUxvYWRFdmVudChmYWxzZSk7
CiAKLSAgICAvLyA3IC0gQWJvcnQgdGhlIG92ZXJhbGwgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29y
aXRobS4KKyAgICAvLyA2IC0gQWJvcnQgdGhlIG92ZXJhbGwgcmVzb3VyY2Ugc2VsZWN0aW9uIGFs
Z29yaXRobS4KICAgICBtX2N1cnJlbnRTb3VyY2VOb2RlID0gMDsKIAogICAgIC8vIFJlc2V0IG1f
cmVhZHlTdGF0ZSBzaW5jZSBtX3BsYXllciBpcyBnb25lLgpAQCAtMjA4Nyw2ICsyMDkzLDE1IEBA
IGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXQKICAgICByZXR1cm4gYXR0
cmlidXRlLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0KIAordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXREZWxheUxvYWRFdmVudChib29sIGRlbGF5KQoreworICAgIGlmIChtX2RlbGF5aW5nVGhlTG9h
ZEV2ZW50ID09IGRlbGF5IHx8ICFkZWxheSAmJiAhbV9kZWxheWluZ1RoZUxvYWRFdmVudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBkZWxheTsKKyAgICAK
KyAgICBkb2N1bWVudCgpLT5zZXREZWxheUxvYWRFdmVudChkZWxheSk7Cit9CisgICAgCiB9CiAK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA2NTE3OSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw2
ICsyODEsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhQ2FuU3RhcnQoKTsK
IAorICAgIHZvaWQgc2V0RGVsYXlMb2FkRXZlbnQoYm9vbCk7CisKICAgICAvLyBSZXN0cmljdGlv
bnMgdG8gY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3JzLiBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgY29t
cGlsZSB0aW1lIGNob2ljZSBhdCB0aGUgbW9tZW50CiAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUg
bm8gYWNjZXNzb3IgZnVuY3Rpb25zLgogICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbnMgewpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjUxNzkpCisrKyBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMSw2ICs4MzEsMTAgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tDb21wbGV0ZWQoKQogICAgIGlmIChudW1SZXF1ZXN0cyht
X2ZyYW1lLT5kb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gU3RpbGwgd2Fp
dGluZyBmb3IgZWxlbWVudHMgdGhhdCBkb24ndCB1c2UgYSBGcmFtZUxvYWRlcj8KKyAgICBpZiAo
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNEZWxheWluZ0xvYWRFdmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICAvLyBPSywgY29tcGxldGVkLgogICAgIG1faXNDb21wbGV0ZSA9IHRydWU7CiAK
QEAgLTg3OSw3ICs4ODMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUNoZWNrTG9hZENv
bXBsCiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ2FsbEltcGxpY2l0Q2xvc2UoKQogewotICAg
IGlmIChtX2RpZENhbGxJbXBsaWNpdENsb3NlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCktPnBhcnNp
bmcoKSkKKyAgICBpZiAobV9kaWRDYWxsSW1wbGljaXRDbG9zZSB8fCBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5wYXJzaW5nKCkgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNEZWxheWluZ0xvYWRFdmVu
dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWFsbENoaWxkcmVuQXJlQ29tcGxldGUo
KSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1MzkxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDgtMTUgIEVyaWMgQ2FybHNvbiAg
PGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0MDEzCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQgc2hvdWxkIGRlbGF5IGRvY3VtZW50IGxv
YWQgZXZlbnQKKworICAgICAgICAqIG1lZGlhL3ZpZGVvLWRlbGF5LWxvYWQtZXZlbnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3ZpZGVvLWxheWVyLWNyYXNoLmh0bWw6IFRyaWdn
ZXIgdGVzdCB3aXRoIHNjcmlwdCBpbmxpbmUgaW4gdGhlIDxib2R5PiBpbnN0ZWFkCisgICAgICAg
IG9mIGZyb20gYW4gb25sb2FkIGhhbmRsZXIgYXMgdGhhdCBydW5zIHRvbyBsYXRlLiBSZWZvcm1h
dCBzY3JpcHQgdG8gbWFrZSBpdCByZWFkYWJsZS4KKwogMjAxMC0wOC0xNSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJ
bmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tZGVsYXktbG9hZC1ldmVudC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tZGVsYXktbG9hZC1ldmVu
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1k
ZWxheS1sb2FkLWV2ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorIAorVGVzdCB0aGUgZG9jdW1lbnQncyBsb2FkIGV2ZW50IGlzIGRlbGF5ZWQgdW50aWwgYSBt
b3ZpZSdzIG1ldGEgZGF0YSBpcyBhdmFpbGFibGUuCisKKworaW5saW5lIHNjcmlwdAorbm8gJ3Ny
YycuCitFWFBFQ1RFRCAodmlkZW8ubmV0d29ya1N0YXRlID09ICcwJykgT0sKK0VYUEVDVEVEICh2
aWRlby5yZWFkeVN0YXRlID09ICcwJykgT0sKKword2l0aCAnc3JjJyBhdHRyaWJ1dGUuCitFWFBF
Q1RFRCAodmlkZW8ubmV0d29ya1N0YXRlID09ICczJykgT0sKK0VYUEVDVEVEICh2aWRlby5yZWFk
eVN0YXRlID09ICcwJykgT0sKKword2l0aCA8c291cmNlPiBlbGVtZW50LgorRVhQRUNURUQgKHZp
ZGVvLm5ldHdvcmtTdGF0ZSA9PSAnMycpIE9LCitFWFBFQ1RFRCAodmlkZW8ucmVhZHlTdGF0ZSA9
PSAnMCcpIE9LCisKK2RvY3VtZW50ICdsb2FkJyBldmVudCBoYW5kbGVyCitubyAnc3JjJy4KK0VY
UEVDVEVEICh2aWRlby5uZXR3b3JrU3RhdGUgPT0gJzAnKSBPSworRVhQRUNURUQgKHZpZGVvLnJl
YWR5U3RhdGUgPT0gJzAnKSBPSworCit3aXRoICdzcmMnIGF0dHJpYnV0ZS4KK0VYUEVDVEVEICh2
aWRlby5uZXR3b3JrU3RhdGUgIT0gJzMnKSBPSworRVhQRUNURUQgKHZpZGVvLm5ldHdvcmtTdGF0
ZSA+PSAnMScpIE9LCitFWFBFQ1RFRCAodmlkZW8ucmVhZHlTdGF0ZSA+PSAnMicpIE9LCisKK3dp
dGggPHNvdXJjZT4gZWxlbWVudC4KK0VYUEVDVEVEICh2aWRlby5uZXR3b3JrU3RhdGUgIT0gJzMn
KSBPSworRVhQRUNURUQgKHZpZGVvLm5ldHdvcmtTdGF0ZSA+PSAnMScpIE9LCitFWFBFQ1RFRCAo
dmlkZW8ucmVhZHlTdGF0ZSA+PSAnMicpIE9LCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3Zp
ZGVvLWRlbGF5LWxvYWQtZXZlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRp
YS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9tZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjkgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0
aXRsZT5kZWxheSBkb2N1bWVudCAnbG9hZCcgZXZlbnQgdGVzdDwvdGl0bGU+CisgICAgICAgIDxz
dHlsZT4gdmlkZW8geyBib3JkZXI6IDNweCBzb2xpZCByZWQ7IH0gPC9zdHlsZT4KKyAgICAgICAg
PHNjcmlwdCBzcmM9dmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIHZh
ciB2aWRlbzsKKworICAgICAgICAgICAgZnVuY3Rpb24gdGVzdE1vdmllV2l0aE5vU291cmNlKGVs
ZW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmlkZW8gPSBlbGVtOyAgIC8vIE5l
ZWQgaXQgaW4gYSBnbG9iYWwgZm9yIHRlc3RFeHBlY3RlZCgpIHRvIHNlZSBpdC4KKyAgICAgICAg
ICAgICAgICBjb25zb2xlV3JpdGUoIjxlbT5ubyAnc3JjJy48L2VtPiIpOworICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ubmV0d29ya1N0YXRlIiwgSFRNTE1lZGlhRWxlbWVudC5w
cm90b3R5cGUuTkVUV09SS19FTVBUWSwgIj09Iik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJ2aWRlby5yZWFkeVN0YXRlIiwgSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuSEFWRV9O
T1RISU5HLCAiPT0iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gdGVz
dE1vdmllV2l0aFNvdXJjZShlbGVtLCBoYXNMb2FkZWQsIG1zZykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB2aWRlbyA9IGVsZW07ICAgLy8gTmVlZCBpdCBpbiBhIGdsb2JhbCBmb3Ig
dGVzdEV4cGVjdGVkKCkgdG8gc2VlIGl0LgorICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSht
c2cpOworICAgICAgICAgICAgICAgIGlmIChoYXNMb2FkZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIG1vdmllIHNob3VsZCBoYXZlIGxvYWRlZCBhdCBsZWFzdCB0byBIQVZFX0NVUlJF
TlRfREFUQQorICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLm5ldHdvcmtT
dGF0ZSIsIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLk5FVFdPUktfTk9fU09VUkNFLCAiIT0i
KTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5uZXR3b3JrU3RhdGUi
LCBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5ORVRXT1JLX0lETEUsICI+PSIpOworICAgICAg
ICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnJlYWR5U3RhdGUiLCBIVE1MTWVkaWFF
bGVtZW50LnByb3RvdHlwZS5IQVZFX0NVUlJFTlRfREFUQSwgIj49Iik7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5uZXR3
b3JrU3RhdGUiLCBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5ORVRXT1JLX05PX1NPVVJDRSwg
Ij09Iik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ucmVhZHlTdGF0
ZSIsIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLkhBVkVfTk9USElORywgIj09Iik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBsb2Fk
ZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGJyPjxi
PmRvY3VtZW50IDxlbT4nbG9hZCc8IiArICIvZW0+IGV2ZW50IGhhbmRsZXI8L2I+Iik7CisKKyAg
ICAgICAgICAgICAgICB0ZXN0TW92aWVXaXRoTm9Tb3VyY2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3ZpZGVvLTEnKSk7CisgICAgICAgICAgICAgICAgdGVzdE1vdmllV2l0aFNvdXJjZShkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW8tMicpLCB0cnVlLCAiPGJyPjxlbT53aXRoICdzcmMn
IGF0dHJpYnV0ZS48L2VtPiIpOworICAgICAgICAgICAgICAgIHRlc3RNb3ZpZVdpdGhTb3VyY2Uo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLTMnKSwgdHJ1ZSwgIjxicj48ZW0+d2l0aCAm
bHQ7c291cmNlJmd0OyBlbGVtZW50LjwvZW0+Iik7CisKKyAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0
PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9ImxvYWRlZCgpIj4KKyAgICAgICAgPHZp
ZGVvIGlkPSJ2aWRlby0xIj48L3ZpZGVvPgorICAgICAgICA8dmlkZW8gaWQ9InZpZGVvLTIiPjwv
dmlkZW8+CisgICAgICAgIDx2aWRlbyBpZD0idmlkZW8tMyI+PHNvdXJjZSBpZD0ic291cmNlLTEi
PjwvdmlkZW8+CisKKyAgICAgICAgPHA+VGVzdCB0aGUgZG9jdW1lbnQncyBsb2FkIGV2ZW50IGlz
IGRlbGF5ZWQgdW50aWwgYSBtb3ZpZSdzIG1ldGEgZGF0YSBpcyBhdmFpbGFibGUuPC9wPgorCisg
ICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxicj48Yj5pbmxpbmUg
c2NyaXB0PC9iPiIpOworCisgICAgICAgICAgICB0ZXN0TW92aWVXaXRoTm9Tb3VyY2UoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLTEnKSk7CisKKyAgICAgICAgICAgIHZpZGVvID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLTInKTsKKyAgICAgICAgICAgIHZpZGVvLnNyYyA9
IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgImNvbnRlbnQvdGVzdCIpOworICAgICAgICAgICAgdGVz
dE1vdmllV2l0aFNvdXJjZSh2aWRlbywgZmFsc2UsICI8YnI+PGVtPndpdGggJ3NyYycgYXR0cmli
dXRlLjwvZW0+Iik7CisKKyAgICAgICAgICAgIHNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzb3VyY2UtMScpOworICAgICAgICAgICAgc291cmNlLnNyYyA9IGZpbmRNZWRpYUZpbGUo
InZpZGVvIiwgImNvbnRlbnQvdGVzdCIpOworICAgICAgICAgICAgdGVzdE1vdmllV2l0aFNvdXJj
ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW8tMycpLCBmYWxzZSwgIjxicj48ZW0+d2l0
aCAmbHQ7c291cmNlJmd0OyBlbGVtZW50LjwvZW0+Iik7CisgICAgICAgIDwvc2NyaXB0PgorCisg
ICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tbGF5ZXIt
Y3Jhc2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1sYXllci1j
cmFzaC5odG1sCShyZXZpc2lvbiA2NTE3OSkKKysrIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWxh
eWVyLWNyYXNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMjAgQEAKLTxzY3JpcHQg
c3JjPSJtZWRpYS1maWxlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJ2aWRlby1wYWludC10
ZXN0LmpzIj48L3NjcmlwdD4KLTxib2R5IG9ubG9hZD0iZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25lJykpOyBkb2N1bWVudC5ib2R5Lm9mZnNldExl
ZnQ7IGluaXQoKSI+Ci08c3R5bGU+Ci12aWRlbyB7IHdpZHRoOjIwMHB4OyBib3JkZXI6IDNweCBz
b2xpZCByZWQ7IC13ZWJraXQtYm94LXJlZmxlY3Q6IGJlbG93IDVweDsgfQotPC9zdHlsZT4KLTxw
PlRlc3QgZHluYW1pYyByZW1vdmFsIG9mIHRyYW5zZm9ybWVkIGFuZCByZWZsZWN0ZWQgdmlkZW8g
PC9wPgotJm5ic3A7PHZpZGVvIGlkPSJvbmUiIHN0eWxlPSItd2Via2l0LXRyYW5zZm9ybTpyb3Rh
dGUoMjBkZWcpIj48L3ZpZGVvPjxicj4KLSZuYnNwOzx2aWRlbyBzdHlsZT0iLXdlYmtpdC10cmFu
c2Zvcm06c2NhbGUoMC41KSI+PC92aWRlbz48YnI+Ci0mbmJzcDs8dmlkZW8gc3R5bGU9Ii13ZWJr
aXQtdHJhbnNmb3JtOnNrZXcoMjBkZWcpIj48L3ZpZGVvPjxicj4KLTxzY3JpcHQ+c2V0U3JjQnlU
YWdOYW1lKCd2aWRlbycsIGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJ2NvbnRlbnQvdGVzdCcpKTwv
c2NyaXB0PgotPC9ib2R5PgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSJtZWRpYS1maWxlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InZpZGVvLXBh
aW50LXRlc3QuanMiPjwvc2NyaXB0PgorICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICB2aWRl
byB7IHdpZHRoOjIwMHB4OyBib3JkZXI6IDNweCBzb2xpZCByZWQ7IC13ZWJraXQtYm94LXJlZmxl
Y3Q6IGJlbG93IDVweDsgfQorICAgICAgICA8L3N0eWxlPgorICAgIDwvaGVhZD4KKyAgICA8Ym9k
eT4KKyAgICAgICAgPHA+VGVzdCBkeW5hbWljIHJlbW92YWwgb2YgdHJhbnNmb3JtZWQgYW5kIHJl
ZmxlY3RlZCB2aWRlbyA8L3A+CisgICAgICAgICZuYnNwOzx2aWRlbyBpZD0ib25lIiBzdHlsZT0i
LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDIwZGVnKSI+PC92aWRlbz48YnI+CisgICAgICAgICZu
YnNwOzx2aWRlbyBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC41KSI+PC92aWRlbz48
YnI+CisgICAgICAgICZuYnNwOzx2aWRlbyBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06c2tldygy
MGRlZykiPjwvdmlkZW8+PGJyPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgc2V0U3Jj
QnlUYWdOYW1lKCd2aWRlbycsIGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJ2NvbnRlbnQvdGVzdCcp
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ29uZScpKTsgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworICAgICAgICAgICAg
aW5pdCgpOworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="53043"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64894</attachid>
            <date>2010-08-19 13:21:19 -0700</date>
            <delta_ts>2010-08-24 17:52:08 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>patch_7.txt</filename>
            <type>text/plain</type>
            <size>20900</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTI1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMDgtMTkgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MDEzCisgICAgICAg
IEhUTUxNZWRpYUVsZW1lbnQgc2hvdWxkIGRlbGF5IGRvY3VtZW50IGxvYWQgZXZlbnQKKworICAg
ICAgICBUZXN0OiBtZWRpYS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0bWwKKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQp
OiBJbml0aWFsaXplIGluY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCk6IE5ldywgZGVjcmVt
ZW50IGluY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQgYW5kCisgICAgICAgIGNhbGwgbG9hZGVy
LT5jaGVja0NvbXBsZXRlZCgpIHdoZW4gaXQgcmVhY2hlcyB6ZXJvLgorICAgICAgICAqIHBhZ2Uv
RG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbmNyZW1lbnRMb2FkRXZl
bnREZWxheUNvdW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzRGVsYXlp
bmdMb2FkRXZlbnQpOiBOZXcuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQp
OiBTdG9wIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KTogRGVsYXkgdGhlIGxvYWQgZXZlbnQgaWYgd2UgZG9uJ3QgdGhlCisgICAgICAg
IG1ldGEgZGF0YSBmb3IgdGhlIG1vdmllIHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnByZXBhcmVGb3JMb2FkKTogRGVsYXkgdGhlIGxvYWQgZXZlbnQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKTogRG9uJ3Qg
ZGVsYXkgdGhlIGxvYWQgZXZlbnQgd2hlbiB0aGVyZSBhcmUgCisgICAgICAgIG5vIG1vcmUgc291
cmNlcyB0byBjb25zaWRlci4gRG9uJ3QgY2hhbmdlIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgZGly
ZWN0bHksIGNhbGwgCisgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KCkgaW5zdGVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndhaXRGb3JTb3VyY2VDaGFuZ2Up
OiBTdG9wIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6bm9uZVN1cHBvcnRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6bWVkaWFFbmdpbmVFcnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFNob3VsZERlbGF5TG9hZEV2ZW50KTog
TmV3LCBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZSBkb2N1bWVudCdzCisgICAgICAgIGxvYWQgZXZl
bnQgZGVsYXkgY291bnQuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmNoZWNrQ29tcGxldGVkKTogU2VlIGlmIHRoZSBkb2N1bWVudCB3YW50cyB0byBkZWxh
eSBjb21wbGV0aW9uIGZvciBlbGVtZW50cworICAgICAgICB0aGF0IGRvbid0IHVzZSBhIEZyYW1l
TG9hZGVyLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoZWNrQ2FsbEltcGxpY2l0
Q2xvc2UpOiBEaXR0bworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorCiAyMDEwLTA4LTEyICBI
dWkgSHVhbmcgIDxodWkuMi5odWFuZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2NTI1MykKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDYgKzQwNiw3IEBAIERvY3Vt
ZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEsKICNlbmRpZgogICAgICwgbV93ZWFr
UmVmZXJlbmNlKERvY3VtZW50V2Vha1JlZmVyZW5jZTo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9p
ZEF0dHJpYnV0ZU5hbWUoaWRBdHRyKQorICAgICwgbV9sb2FkRXZlbnREZWxheUNvdW50KDApCiB7
CiAgICAgbV9kb2N1bWVudCA9IHRoaXM7CiAKQEAgLTUwNTcsNCArNTA1OCwxMyBAQCBJbnNwZWN0
b3JDb250cm9sbGVyKiBEb2N1bWVudDo6aW5zcGVjdG9yCiB9CiAjZW5kaWYKIAordm9pZCBEb2N1
bWVudDo6ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpCit7CisgICAgQVNTRVJUKG1fbG9h
ZEV2ZW50RGVsYXlDb3VudCk7CisgICAgLS1tX2xvYWRFdmVudERlbGF5Q291bnQ7CisKKyAgICBp
ZiAoZnJhbWUoKSAmJiAhbV9sb2FkRXZlbnREZWxheUNvdW50KQorICAgICAgICBmcmFtZSgpLT5s
b2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiA2NTI1MykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMjEsNiArMTAyMSwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCB3cml0
ZURpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV93cml0ZURpc2FibGVkOyB9CiAgICAgdm9pZCBz
ZXRXcml0ZURpc2FibGVkKGJvb2wgZmxhZykgeyBtX3dyaXRlRGlzYWJsZWQgPSBmbGFnOyB9CiAK
KyAgICAvLyBVc2VkIHRvIGFsbG93IGVsZW1lbnQgdGhhdCBsb2FkcyBkYXRhIHdpdGhvdXQgdXNp
bmcgYSBGcmFtZUxvYWRlciB0byBkZWxheSB0aGUgJ2xvYWQnIGV2ZW50LgorICAgIHZvaWQgaW5j
cmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpIHsgKyttX2xvYWRFdmVudERlbGF5Q291bnQ7IH0K
KyAgICB2b2lkIGRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKKyAgICBib29sIGlzRGVs
YXlpbmdMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2xvYWRFdmVudERlbGF5Q291bnQ7IH0K
KwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgS1VSTCYsIGJvb2wgaXNY
SFRNTCwgYm9vbCBpc0hUTUwpOwogCkBAIC0xMzAyLDYgKzEzMDcsOCBAQCBwcml2YXRlOgogICAg
IEhhc2hTZXQ8TWVkaWFDYW5TdGFydExpc3RlbmVyKj4gbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJz
OwogCiAgICAgUXVhbGlmaWVkTmFtZSBtX2lkQXR0cmlidXRlTmFtZTsKKworICAgIGludCBtX2xv
YWRFdmVudERlbGF5Q291bnQ7CiB9OwogCiBpbmxpbmUgYm9vbCBEb2N1bWVudDo6aGFzRWxlbWVu
dFdpdGhJZChBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY1NDI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiQ2xp
ZW50UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiQ29udGVu
dFR5cGUuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC0xMTIs
NyArMTExLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAogICAg
ICwgbV9wcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygwKQogICAgICwgbV9wbGF5aW5nKGZh
bHNlKQogICAgICwgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQoZmFsc2UpCi0gICAgLCBt
X2RlbGF5aW5nVGhlTG9hZEV2ZW50KGZhbHNlKQorICAgICwgbV9zaG91bGREZWxheUxvYWRFdmVu
dChmYWxzZSkKICAgICAsIG1faGF2ZUZpcmVkTG9hZGVkRGF0YShmYWxzZSkKICAgICAsIG1faW5B
Y3RpdmVEb2N1bWVudCh0cnVlKQogICAgICwgbV9hdXRvcGxheWluZyh0cnVlKQpAQCAtMTQwLDYg
KzEzOSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KCkKIHsKICAgICBp
ZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50KCktPnJl
bW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRF
dmVudChmYWxzZSk7CiAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZh
dGlvbkNhbGxiYWNrcyh0aGlzKTsKICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yTWVkaWFW
b2x1bWVDYWxsYmFja3ModGhpcyk7CiB9CkBAIC0xNDgsNiArMTQ4LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZQogewogICAgIGlmIChtX2lzV2FpdGluZ1VudGls
TWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOworICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKICAgICBk
b2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMp
OwogICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlz
KTsKICAgICBIVE1MRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKQEAgLTE1
Nyw2ICsxNTgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyCiB7
CiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQogICAgICAgICBkb2N1bWVu
dCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA8IEhBVkVfQ1VSUkVOVF9EQVRBKQorICAgICAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudCh0
cnVlKTsKICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxi
YWNrcyh0aGlzKTsKICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJh
Y2tzKHRoaXMpOwogICAgIEhUTUxFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
CkBAIC01NDcsNiArNTUwLDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxv
YWQoKQogICAgIG1fcGxheWVkVGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogICAg
IG1fbGFzdFNlZWtUaW1lID0gMDsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IGZhbHNl
OworCisgICAgLy8gVGhlIHNwZWMgZG9lc24ndCBzYXkgdG8gYmxvY2sgdGhlIGxvYWQgZXZlbnQg
dW50aWwgd2UgYWN0dWFsbHkgcnVuIHRoZSBhc3luY2hyb25vdXMgc2VjdGlvbgorICAgIC8vIGFs
Z29yaXRobSwgYnV0IGRvIGl0IG5vdyBiZWNhdXNlIHdlIHdvbid0IHN0YXJ0IHRoYXQgdW50aWwg
YWZ0ZXIgdGhlIHRpbWVyIGZpcmVzIGFuZCB0aGUgCisgICAgLy8gZXZlbnQgbWF5IGhhdmUgYWxy
ZWFkeSBmaXJlZCBieSB0aGVuLgorICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KHRydWUpOwog
fQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCkBAIC01ODAsMTggKzU4
OCwxOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAKICAgICAg
ICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBtX2xvYWRTdGF0ZSA9IFdhaXRpbmdGb3JTb3Vy
Y2U7CisgICAgICAgICAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAgICAg
ICAgICAgIC8vIC4uLiBzZXQgdGhlIG5ldHdvcmtTdGF0ZSB0byBORVRXT1JLX0VNUFRZLCBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMKICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19F
TVBUWTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kZWxheWluZ1RoZUxvYWRFdmVudCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBtb2RlID0gY2hpbGRyZW47CiAg
ICAgfQogCi0gICAgLy8gNAotICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSB0cnVlOworICAg
IC8vIDQgLSBTZXQgdGhlIG1lZGlhIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBm
bGFnIHRvIHRydWUgKHRoaXMgZGVsYXlzIHRoZSBsb2FkIGV2ZW50KSwgCisgICAgLy8gYW5kIHNl
dCBpdHMgbmV0d29ya1N0YXRlIHRvIE5FVFdPUktfTE9BRElORy4KKyAgICBzZXRTaG91bGREZWxh
eUxvYWRFdmVudCh0cnVlKTsKICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTE9BRElORzsK
IAogICAgIC8vIDUKQEAgLTcxNSw3ICs3MjQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Ondh
aXRGb3JTb3VyY2VDaGFuCiAgICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NPVVJDRTsK
IAogICAgIC8vIDYuMTggLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVu
dCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAg
IG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRF
dmVudChmYWxzZSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bm9uZVN1cHBvcnRlZCgp
CkBAIC03MzgsNyArNzQ3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpub25lU3VwcG9ydGVk
KCkKICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIAogICAgIC8v
IDggLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZh
bHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdU
aGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7
CiAKICAgICAvLyA5IC1BYm9ydCB0aGVzZSBzdGVwcy4gVW50aWwgdGhlIGxvYWQoKSBtZXRob2Qg
aXMgaW52b2tlZCwgdGhlIGVsZW1lbnQgd29uJ3QgYXR0ZW1wdCB0byBsb2FkIGFub3RoZXIgcmVz
b3VyY2UuCiAKQEAgLTc1OCw4ICs3NjcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
RW5naW5lRXJyb3IoCiAgICAgLy8gc2V0IHRvIE1FRElBX0VSUl9ORVRXT1JLL01FRElBX0VSUl9E
RUNPREUuCiAgICAgbV9lcnJvciA9IGVycjsKIAotICAgIC8vIDMgLSBRdWV1ZSBhIHRhc2sgdG8g
ZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCB0aGUgbWVkaWEgZWxlbWVudCwg
aW4KLSAgICAvLyB0aGUgY29udGV4dCBvZiB0aGUgZmV0Y2hpbmcgcHJvY2VzcyBzdGFydGVkIGJ5
IHRoaXMgaW5zdGFuY2Ugb2YgdGhpcyBhbGdvcml0aG0uCisgICAgLy8gMyAtIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGVycm9yIGF0IHRoZSBtZWRpYSBlbGVtZW50
LgogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogCiAgICAgLy8g
NCAtIFNldCB0aGUgZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSBhdHRyaWJ1dGUgdG8gdGhlIE5FVFdP
UktfRU1QVFkgdmFsdWUgYW5kIHF1ZXVlIGEKQEAgLTc2OCw3ICs3NzYsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhRW5naW5lRXJyb3IoCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5h
bWVzKCkuZW1wdGllZEV2ZW50KTsKIAogICAgIC8vIDUgLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxh
eWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRo
ZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICBz
ZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAgICAvLyA2IC0gQWJvcnQgdGhlIG92
ZXJhbGwgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4KICAgICBtX2N1cnJlbnRTb3VyY2VO
b2RlID0gMDsKQEAgLTkxNSwyMSArOTIzLDE2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0
UmVhZHlTdGF0ZShNZWQKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVk
bWV0YWRhdGFFdmVudCk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAgbV9kZWxheWluZ1RoZUxvYWRF
dmVudCA9IGZhbHNlOwogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKICAgICB9CiAKICAgICBi
b29sIHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSA9IGZhbHNlOwogCi0gICAgLy8gNC44LjEwLjcg
c2F5cyBsb2FkZWRkYXRhIGlzIHNlbnQgb25seSB3aGVuIHRoZSBuZXcgc3RhdGUgKmlzKiBIQVZF
X0NVUlJFTlRfREFUQTogIklmIHRoZQotICAgIC8vIHByZXZpb3VzIHJlYWR5IHN0YXRlIHdhcyBI
QVZFX01FVEFEQVRBIGFuZCB0aGUgbmV3IHJlYWR5IHN0YXRlIGlzIEhBVkVfQ1VSUkVOVF9EQVRB
IiwgCi0gICAgLy8gYnV0IHRoZSBldmVudCB0YWJsZSBhdCB0aGUgZW5kIG9mIHRoZSBzcGVjIHNh
eXMgaXQgaXMgc2VudCB3aGVuOiAicmVhZHlTdGF0ZSBuZXdseSAKLSAgICAvLyBpbmNyZWFzZWQg
dG8gSEFWRV9DVVJSRU5UX0RBVEEgIG9yIGdyZWF0ZXIgZm9yIHRoZSBmaXJzdCB0aW1lIgotICAg
IC8vIFdlIGdvIHdpdGggdGhlIGxhdGVyIGJlY2F1c2UgaXQgc2VlbXMgdXNlZnVsIHRvIGNvdW50
IG9uIGdldHRpbmcgdGhpcyBldmVudAogICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJS
RU5UX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0NVUlJFTlRfREFUQSAmJiAhbV9oYXZlRmlyZWRM
b2FkZWREYXRhKSB7CiAgICAgICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IHRydWU7CiAgICAg
ICAgIHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSA9IHRydWU7CiAgICAgICAgIHNjaGVkdWxlRXZl
bnQoZXZlbnROYW1lcygpLmxvYWRlZGRhdGFFdmVudCk7CisgICAgICAgIHNldFNob3VsZERlbGF5
TG9hZEV2ZW50KGZhbHNlKTsKICAgICB9CiAKICAgICBib29sIGlzUG90ZW50aWFsbHlQbGF5aW5n
ID0gcG90ZW50aWFsbHlQbGF5aW5nKCk7CkBAIC0xODE4LDEzICsxODIxLDEyIEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQKICAgICAvLyAyIC0gU2V0IHRoZSBlcnJv
ciBhdHRyaWJ1dGUgdG8gYSBuZXcgTWVkaWFFcnJvciBvYmplY3Qgd2hvc2UgY29kZSBhdHRyaWJ1
dGUgaXMgc2V0IHRvIE1FRElBX0VSUl9BQk9SVEVELgogICAgIG1fZXJyb3IgPSBNZWRpYUVycm9y
OjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQpOwogCi0gICAgLy8gMyAtIFF1
ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoZSBt
ZWRpYSBlbGVtZW50LCBpbiB0aGUgY29udGV4dAotICAgIC8vIG9mIHRoZSBmZXRjaGluZyBwcm9j
ZXNzIHN0YXJ0ZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiB0aGlzIGFsZ29yaXRobS4KKyAgICAvLyAz
IC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgZXJyb3IgYXQgdGhl
IG1lZGlhIGVsZW1lbnQuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuYWJvcnRFdmVu
dCk7CiAKLSAgICAvLyA1IC0gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0YXRlIGF0dHJp
YnV0ZSBoYXMgYSB2YWx1ZSBlcXVhbCB0byBIQVZFX05PVEhJTkcsIHNldCB0aGUKLSAgICAvLyBl
bGVtZW50J3MgbmV0d29ya1N0YXRlIGF0dHJpYnV0ZSB0byB0aGUgTkVUV09SS19FTVBUWSB2YWx1
ZSBhbmQgcXVldWUgYSB0YXNrIHRvIGZpcmUgYQotICAgIC8vIHNpbXBsZSBldmVudCBjYWxsZWQg
ZW1wdGllZCBhdCB0aGUgZWxlbWVudC4gT3RoZXJ3aXNlLCBzZXQgc2V0IHRoZSBlbGVtZW50J3Mg
bmV0d29ya1N0YXRlCisgICAgLy8gNCAtIElmIHRoZSBtZWRpYSBlbGVtZW50J3MgcmVhZHlTdGF0
ZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgZXF1YWwgdG8gSEFWRV9OT1RISU5HLCBzZXQgdGhlIAor
ICAgIC8vIGVsZW1lbnQncyBuZXR3b3JrU3RhdGUgYXR0cmlidXRlIHRvIHRoZSBORVRXT1JLX0VN
UFRZIHZhbHVlIGFuZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIAorICAgIC8vIHNpbXBsZSBldmVu
dCBuYW1lZCBlbXB0aWVkIGF0IHRoZSBlbGVtZW50LiBPdGhlcndpc2UsIHNldCB0aGUgZWxlbWVu
dCdzIG5ldHdvcmtTdGF0ZSAKICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhlIE5FVFdPUktfSURMRSB2
YWx1ZS4KICAgICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfTk9USElORykgewogICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfRU1QVFk7CkBAIC0xODMzLDEwICsxODM1LDEwIEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQKICAgICBlbHNlCiAgICAgICAg
IG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19JRExFOwogCi0gICAgLy8gNiAtIFNldCB0aGUgZWxl
bWVudCdzIGRlbGF5aW5nLXRoZS1sb2FkLWV2ZW50IGZsYWcgdG8gZmFsc2UuIFRoaXMgc3RvcHMg
ZGVsYXlpbmcgdGhlIGxvYWQgZXZlbnQuCi0gICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9IGZh
bHNlOworICAgIC8vIDUgLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVu
dCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgorICAg
IHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKIAotICAgIC8vIDcgLSBBYm9ydCB0aGUg
b3ZlcmFsbCByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgorICAgIC8vIDYgLSBBYm9ydCB0
aGUgb3ZlcmFsbCByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgogICAgIG1fY3VycmVudFNv
dXJjZU5vZGUgPSAwOwogCiAgICAgLy8gUmVzZXQgbV9yZWFkeVN0YXRlIHNpbmNlIG1fcGxheWVy
IGlzIGdvbmUuCkBAIC0yMDg3LDYgKzIwODksMTggQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojpp
c1VSTEF0dHJpYnV0ZShBdAogICAgIHJldHVybiBhdHRyaWJ1dGUtPm5hbWUoKSA9PSBzcmNBdHRy
OwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFNob3VsZERlbGF5TG9hZEV2ZW50KGJv
b2wgZGVsYXkpCit7CisgICAgaWYgKG1fc2hvdWxkRGVsYXlMb2FkRXZlbnQgPT0gZGVsYXkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkRGVsYXlMb2FkRXZlbnQgPSBkZWxheTsKKyAg
ICBpZiAoZGVsYXkpCisgICAgICAgIGRvY3VtZW50KCktPmluY3JlbWVudExvYWRFdmVudERlbGF5
Q291bnQoKTsKKyAgICBlbHNlCisgICAgICAgIGRvY3VtZW50KCktPmRlY3JlbWVudExvYWRFdmVu
dERlbGF5Q291bnQoKTsKK30KKyAgICAKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgJKHJldmlzaW9uIDY1MjUzKQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSw4IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFydCgpOwogCisgICAgdm9pZCBzZXRTaG91bGREZWxheUxv
YWRFdmVudChib29sKTsKKwogICAgIC8vIFJlc3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBi
ZWhhdmlvcnMuIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBjb21waWxlIHRpbWUgY2hvaWNlIGF0IHRo
ZSBtb21lbnQKICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBubyBhY2Nlc3NvciBmdW5jdGlvbnMu
CiAgICAgZW51bSBCZWhhdmlvclJlc3RyaWN0aW9ucyB7CkBAIC0zNDAsNyArMzQyLDcgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9wbGF5aW5nIDogMTsKICAgICBib29sIG1faXNXYWl0aW5nVW50
aWxNZWRpYUNhblN0YXJ0IDogMTsKLSAgICBib29sIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgOiAx
OworICAgIGJvb2wgbV9zaG91bGREZWxheUxvYWRFdmVudCA6IDE7CiAgICAgYm9vbCBtX2hhdmVG
aXJlZExvYWRlZERhdGEgOiAxOwogICAgIGJvb2wgbV9pbkFjdGl2ZURvY3VtZW50IDogMTsKICAg
ICBib29sIG1fYXV0b3BsYXlpbmcgOiAxOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2
aXNpb24gNjUyNTMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMSw2ICs4MzEsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tDb21wbGV0
ZWQoKQogICAgIGlmIChudW1SZXF1ZXN0cyhtX2ZyYW1lLT5kb2N1bWVudCgpKSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgLy8gU3RpbGwgd2FpdGluZyBmb3IgZWxlbWVudHMgdGhhdCBkb24ndCB1
c2UgYSBGcmFtZUxvYWRlcj8KKyAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNEZWxheWlu
Z0xvYWRFdmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBPSywgY29tcGxldGVkLgog
ICAgIG1faXNDb21wbGV0ZSA9IHRydWU7CiAKQEAgLTg3OSw3ICs4ODMsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpzY2hlZHVsZUNoZWNrTG9hZENvbXBsCiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNr
Q2FsbEltcGxpY2l0Q2xvc2UoKQogewotICAgIGlmIChtX2RpZENhbGxJbXBsaWNpdENsb3NlIHx8
IG1fZnJhbWUtPmRvY3VtZW50KCktPnBhcnNpbmcoKSkKKyAgICBpZiAobV9kaWRDYWxsSW1wbGlj
aXRDbG9zZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5wYXJzaW5nKCkgfHwgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+aXNEZWxheWluZ0xvYWRFdmVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIWFsbENoaWxkcmVuQXJlQ29tcGxldGUoKSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1MjUzKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDgtMTYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MDEzCisgICAgICAgIEhUTUxNZWRpYUVsZW1l
bnQgc2hvdWxkIGRlbGF5IGRvY3VtZW50IGxvYWQgZXZlbnQKKworICAgICAgICAqIG1lZGlhL3Zp
ZGVvLWRlbGF5LWxvYWQtZXZlbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRp
YS92aWRlby1kZWxheS1sb2FkLWV2ZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3Zp
ZGVvLWxheWVyLWNyYXNoLmh0bWw6IFRyaWdnZXIgdGVzdCB3aXRoIHNjcmlwdCBpbmxpbmUgaW4g
dGhlIDxib2R5PiBpbnN0ZWFkCisgICAgICAgIG9mIGZyb20gYW4gb25sb2FkIGhhbmRsZXIgYXMg
dGhhdCBydW5zIHRvbyBsYXRlLiBSZWZvcm1hdCBzY3JpcHQgdG8gbWFrZSBpdCByZWFkYWJsZS4K
KwogMjAxMC0wOC0xMiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIENocm9taXVtIGV4cGVjdGF0aW9ucyB0d2Vhay4KSW5kZXg6IExheW91
dFRlc3RzL21lZGlhL3ZpZGVvLWRlbGF5LWxvYWQtZXZlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWRlbGF5LWxvYWQtZXZlbnQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tZGVsYXktbG9hZC1l
dmVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKyAKK1Rlc3Qg
dGhlIGRvY3VtZW50J3MgbG9hZCBldmVudCBpcyBkZWxheWVkIHVudGlsIGEgbW92aWUncyBtZXRh
IGRhdGEgaXMgYXZhaWxhYmxlLgorCisKK2lubGluZSBzY3JpcHQKK25vICdzcmMnLgorRVhQRUNU
RUQgKHZpZGVvLm5ldHdvcmtTdGF0ZSA9PSAnMCcpIE9LCitFWFBFQ1RFRCAodmlkZW8ucmVhZHlT
dGF0ZSA9PSAnMCcpIE9LCisKK3dpdGggJ3NyYycgYXR0cmlidXRlLgorRVhQRUNURUQgKHZpZGVv
Lm5ldHdvcmtTdGF0ZSA9PSAnMycpIE9LCitFWFBFQ1RFRCAodmlkZW8ucmVhZHlTdGF0ZSA9PSAn
MCcpIE9LCisKK3dpdGggPHNvdXJjZT4gZWxlbWVudC4KK0VYUEVDVEVEICh2aWRlby5uZXR3b3Jr
U3RhdGUgPT0gJzMnKSBPSworRVhQRUNURUQgKHZpZGVvLnJlYWR5U3RhdGUgPT0gJzAnKSBPSwor
Citkb2N1bWVudCAnbG9hZCcgZXZlbnQgaGFuZGxlcgorbm8gJ3NyYycuCitFWFBFQ1RFRCAodmlk
ZW8ubmV0d29ya1N0YXRlID09ICcwJykgT0sKK0VYUEVDVEVEICh2aWRlby5yZWFkeVN0YXRlID09
ICcwJykgT0sKKword2l0aCAnc3JjJyBhdHRyaWJ1dGUuCitFWFBFQ1RFRCAodmlkZW8ubmV0d29y
a1N0YXRlICE9ICczJykgT0sKK0VYUEVDVEVEICh2aWRlby5uZXR3b3JrU3RhdGUgPj0gJzEnKSBP
SworRVhQRUNURUQgKHZpZGVvLnJlYWR5U3RhdGUgPj0gJzInKSBPSworCit3aXRoIDxzb3VyY2U+
IGVsZW1lbnQuCitFWFBFQ1RFRCAodmlkZW8ubmV0d29ya1N0YXRlICE9ICczJykgT0sKK0VYUEVD
VEVEICh2aWRlby5uZXR3b3JrU3RhdGUgPj0gJzEnKSBPSworRVhQRUNURUQgKHZpZGVvLnJlYWR5
U3RhdGUgPj0gJzInKSBPSworCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1kZWxheS1s
b2FkLWV2ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tZGVs
YXktbG9hZC1ldmVudC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdmlk
ZW8tZGVsYXktbG9hZC1ldmVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8dGl0bGU+ZGVsYXkg
ZG9jdW1lbnQgJ2xvYWQnIGV2ZW50IHRlc3Q8L3RpdGxlPgorICAgICAgICA8c3R5bGU+IHZpZGVv
IHsgYm9yZGVyOiAzcHggc29saWQgcmVkOyB9IDwvc3R5bGU+CisgICAgICAgIDxzY3JpcHQgc3Jj
PXZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPW1lZGlhLWZpbGUu
anM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICB2YXIgdmlkZW87CisK
KyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RNb3ZpZVdpdGhOb1NvdXJjZShlbGVtKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHZpZGVvID0gZWxlbTsgICAvLyBOZWVkIGl0IGluIGEg
Z2xvYmFsIGZvciB0ZXN0RXhwZWN0ZWQoKSB0byBzZWUgaXQuCisgICAgICAgICAgICAgICAgY29u
c29sZVdyaXRlKCI8ZW0+bm8gJ3NyYycuPC9lbT4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInZpZGVvLm5ldHdvcmtTdGF0ZSIsIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLk5F
VFdPUktfRU1QVFksICI9PSIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8u
cmVhZHlTdGF0ZSIsIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLkhBVkVfTk9USElORywgIj09
Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RNb3ZpZVdpdGhT
b3VyY2UoZWxlbSwgaGFzTG9hZGVkLCBtc2cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdmlkZW8gPSBlbGVtOyAgIC8vIE5lZWQgaXQgaW4gYSBnbG9iYWwgZm9yIHRlc3RFeHBlY3Rl
ZCgpIHRvIHNlZSBpdC4KKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUobXNnKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaGFzTG9hZGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBt
b3ZpZSBzaG91bGQgaGF2ZSBsb2FkZWQgYXQgbGVhc3QgdG8gSEFWRV9DVVJSRU5UX0RBVEEKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5uZXR3b3JrU3RhdGUiLCBIVE1M
TWVkaWFFbGVtZW50LnByb3RvdHlwZS5ORVRXT1JLX05PX1NPVVJDRSwgIiE9Iik7CisgICAgICAg
ICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ubmV0d29ya1N0YXRlIiwgSFRNTE1lZGlh
RWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19JRExFLCAiPj0iKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5yZWFkeVN0YXRlIiwgSFRNTE1lZGlhRWxlbWVudC5wcm90
b3R5cGUuSEFWRV9DVVJSRU5UX0RBVEEsICI+PSIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ubmV0d29ya1N0YXRlIiwg
SFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19OT19TT1VSQ0UsICI9PSIpOworICAg
ICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnJlYWR5U3RhdGUiLCBIVE1MTWVk
aWFFbGVtZW50LnByb3RvdHlwZS5IQVZFX05PVEhJTkcsICI9PSIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxicj48Yj5kb2N1bWVudCA8
ZW0+J2xvYWQnPCIgKyAiL2VtPiBldmVudCBoYW5kbGVyPC9iPiIpOworCisgICAgICAgICAgICAg
ICAgdGVzdE1vdmllV2l0aE5vU291cmNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlby0x
JykpOworICAgICAgICAgICAgICAgIHRlc3RNb3ZpZVdpdGhTb3VyY2UoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3ZpZGVvLTInKSwgdHJ1ZSwgIjxicj48ZW0+d2l0aCAnc3JjJyBhdHRyaWJ1dGUu
PC9lbT4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0TW92aWVXaXRoU291cmNlKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd2aWRlby0zJyksIHRydWUsICI8YnI+PGVtPndpdGggJmx0O3NvdXJjZSZn
dDsgZWxlbWVudC48L2VtPiIpOworCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hl
YWQ+CisgICAgPGJvZHkgb25sb2FkPSJsb2FkZWQoKSI+CisgICAgICAgIDx2aWRlbyBpZD0idmlk
ZW8tMSI+PC92aWRlbz4KKyAgICAgICAgPHZpZGVvIGlkPSJ2aWRlby0yIj48L3ZpZGVvPgorICAg
ICAgICA8dmlkZW8gaWQ9InZpZGVvLTMiPjxzb3VyY2UgaWQ9InNvdXJjZS0xIj48L3ZpZGVvPgor
CisgICAgICAgIDxwPlRlc3QgdGhlIGRvY3VtZW50J3MgbG9hZCBldmVudCBpcyBkZWxheWVkIHVu
dGlsIGEgbW92aWUncyBtZXRhIGRhdGEgaXMgYXZhaWxhYmxlLjwvcD4KKworICAgICAgICA8c2Ny
aXB0PgorICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8YnI+PGI+aW5saW5lIHNjcmlwdDwvYj4i
KTsKKworICAgICAgICAgICAgdGVzdE1vdmllV2l0aE5vU291cmNlKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd2aWRlby0xJykpOworCisgICAgICAgICAgICB2aWRlbyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd2aWRlby0yJyk7CisgICAgICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFG
aWxlKCJ2aWRlbyIsICJjb250ZW50L3Rlc3QiKTsKKyAgICAgICAgICAgIHRlc3RNb3ZpZVdpdGhT
b3VyY2UodmlkZW8sIGZhbHNlLCAiPGJyPjxlbT53aXRoICdzcmMnIGF0dHJpYnV0ZS48L2VtPiIp
OworCisgICAgICAgICAgICBzb3VyY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNl
LTEnKTsKKyAgICAgICAgICAgIHNvdXJjZS5zcmMgPSBmaW5kTWVkaWFGaWxlKCJ2aWRlbyIsICJj
b250ZW50L3Rlc3QiKTsKKyAgICAgICAgICAgIHRlc3RNb3ZpZVdpdGhTb3VyY2UoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLTMnKSwgZmFsc2UsICI8YnI+PGVtPndpdGggJmx0O3NvdXJj
ZSZndDsgZWxlbWVudC48L2VtPiIpOworICAgICAgICA8L3NjcmlwdD4KKworICAgIDwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWxheWVyLWNyYXNoLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tbGF5ZXItY3Jhc2guaHRtbAko
cmV2aXNpb24gNjUyNTMpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1sYXllci1jcmFzaC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyICsxLDIwIEBACi08c2NyaXB0IHNyYz0ibWVkaWEt
ZmlsZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0idmlkZW8tcGFpbnQtdGVzdC5qcyI+PC9z
Y3JpcHQ+Ci08Ym9keSBvbmxvYWQ9ImRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ29uZScpKTsgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OyBpbml0KCki
PgotPHN0eWxlPgotdmlkZW8geyB3aWR0aDoyMDBweDsgYm9yZGVyOiAzcHggc29saWQgcmVkOyAt
d2Via2l0LWJveC1yZWZsZWN0OiBiZWxvdyA1cHg7IH0KLTwvc3R5bGU+Ci08cD5UZXN0IGR5bmFt
aWMgcmVtb3ZhbCBvZiB0cmFuc2Zvcm1lZCBhbmQgcmVmbGVjdGVkIHZpZGVvIDwvcD4KLSZuYnNw
Ozx2aWRlbyBpZD0ib25lIiBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDIwZGVnKSI+
PC92aWRlbz48YnI+Ci0mbmJzcDs8dmlkZW8gc3R5bGU9Ii13ZWJraXQtdHJhbnNmb3JtOnNjYWxl
KDAuNSkiPjwvdmlkZW8+PGJyPgotJm5ic3A7PHZpZGVvIHN0eWxlPSItd2Via2l0LXRyYW5zZm9y
bTpza2V3KDIwZGVnKSI+PC92aWRlbz48YnI+Ci08c2NyaXB0PnNldFNyY0J5VGFnTmFtZSgndmlk
ZW8nLCBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICdjb250ZW50L3Rlc3QnKSk8L3NjcmlwdD4KLTwv
Ym9keT4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0IHNyYz0ibWVkaWEtZmls
ZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJ2aWRlby1wYWludC10ZXN0Lmpz
Ij48L3NjcmlwdD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgdmlkZW8geyB3aWR0aDoy
MDBweDsgYm9yZGVyOiAzcHggc29saWQgcmVkOyAtd2Via2l0LWJveC1yZWZsZWN0OiBiZWxvdyA1
cHg7IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAg
IDxwPlRlc3QgZHluYW1pYyByZW1vdmFsIG9mIHRyYW5zZm9ybWVkIGFuZCByZWZsZWN0ZWQgdmlk
ZW8gPC9wPgorICAgICAgICAmbmJzcDs8dmlkZW8gaWQ9Im9uZSIgc3R5bGU9Ii13ZWJraXQtdHJh
bnNmb3JtOnJvdGF0ZSgyMGRlZykiPjwvdmlkZW8+PGJyPgorICAgICAgICAmbmJzcDs8dmlkZW8g
c3R5bGU9Ii13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDAuNSkiPjwvdmlkZW8+PGJyPgorICAgICAg
ICAmbmJzcDs8dmlkZW8gc3R5bGU9Ii13ZWJraXQtdHJhbnNmb3JtOnNrZXcoMjBkZWcpIj48L3Zp
ZGVvPjxicj4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIHNldFNyY0J5VGFnTmFtZSgn
dmlkZW8nLCBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICdjb250ZW50L3Rlc3QnKSk7CisgICAgICAg
ICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdv
bmUnKSk7IGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIGluaXQoKTsKKyAg
ICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="53545"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>