<?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>18725</bug_id>
          
          <creation_ts>2008-04-24 18:01:08 -0700</creation_ts>
          <short_desc>Make postMessage asynchronous</short_desc>
          <delta_ts>2008-05-06 15:04:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2008-April/014551.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>17331</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>collinj</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
    
    <cc>jwalden+bwo</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>78846</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-24 18:01:08 -0700</bug_when>
    <thetext>Ian has updated the HTML5 spec for postMessage in two ways.

1) The message is not delivered asynchronously.

2) The targetOrigin parameter is now required.  If the page passes the value &quot;*&quot;, the browser can deliver the message to any origin.

We should update our implementation to match the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78972</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-26 09:30:32 -0700</bug_when>
    <thetext>I have this implemented in my tree, but I&apos;d like to write a bunch more tests.  I can upload a patch once Bug 17331 lands (so I can made a diff easily).

I didn&apos;t use FrameView::scheduleEvent to schedule the event because we need to do the access check for targetOrigin synchronously with dispatching the event and we want the MessageEvent to bind to the DOMWindow during navigation (not to its target, the document).  Instead, I used a design similar to HTMLMediaElement::dispatchEventAsync, storing the pending MessageEvents in DOMWindow.  This should work correctly with respect to frame navigation but means MessageEvents will not respect FrameView::pauseScheduledEvents and FrameView::resumeScheduledEvents.  Does this design sound reasonable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79043</commentid>
    <comment_count>2</comment_count>
      <attachid>20850</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-27 10:50:22 -0700</bug_when>
    <thetext>Created attachment 20850
Work in progress

Here is a work-in-progress version of the patch.  I haven&apos;t started working on the LayoutTests yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79044</commentid>
    <comment_count>3</comment_count>
      <attachid>20851</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-27 10:53:12 -0700</bug_when>
    <thetext>Created attachment 20851
Work in progress

Oops.  Some old code snuck into that last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79056</commentid>
    <comment_count>4</comment_count>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2008-04-27 13:12:44 -0700</bug_when>
    <thetext>Note also that the target of events changed from document to window.

I don&apos;t think the &quot;clustering&quot; of events you appear to implement is sound (they should interleave with other events), but I&apos;m having a hard time thinking of how a webpage could actually have problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79119</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-28 08:24:25 -0700</bug_when>
    <thetext>Thanks for your comments Jeff.

(In reply to comment #4)
&gt; Note also that the target of events changed from document to window.

There is a separate bug about that (Bug 18771).

&gt; I don&apos;t think the &quot;clustering&quot; of events you appear to implement is sound
&gt; (they should interleave with other events), but I&apos;m having a hard time
&gt; thinking of how a webpage could actually have problems.

Ok.  I&apos;ll figure out a way to integrate the events with the main event queue in FrameView.  Maybe adding a &quot;custom dispatch&quot; flag to events and a virtual function?

I&apos;m going to be out of town for the next few days.  I&apos;ll post a revised patch either later this week or this weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79260</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-29 20:46:29 -0700</bug_when>
    <thetext>&gt; Ok.  I&apos;ll figure out a way to integrate the events with the main event queue
&gt; in FrameView.

Hum...  Upon further investigation, it looks like the event queue in FrameView is something specially for delaying events during layout and uses the same event &quot;clustering&quot; pattern.  In fact, there are a number of other examples of this event clustering pattern in our codebase.  For example, Document::dispatchImageLoadEventSoon uses the same pattern.

One option is create an TaskQueue class that knows how to queue up &quot;Tasks&quot; using timers and run them in the proper order with respect to the main event loop.  Based on my current understanding, this would require creating one Timer object for each Task.

I&apos;m inclined to keep the current implementation, but I can code up the TaskQueue approach if you&apos;d like to see what that might look like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79261</commentid>
    <comment_count>7</comment_count>
      <attachid>20896</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-04-29 21:37:35 -0700</bug_when>
    <thetext>Created attachment 20896
Work in progress, no clustering

This turned out to be easier than I thought using the a pattern from the implementation of setTimeout.  I think this patch is wrong because the Timers can outlive the DOMWindow, but I&apos;ll work that out in the next update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79720</commentid>
    <comment_count>8</comment_count>
      <attachid>20978</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-05-05 21:00:27 -0700</bug_when>
    <thetext>Created attachment 20978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79756</commentid>
    <comment_count>9</comment_count>
      <attachid>20978</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-05-06 09:20:51 -0700</bug_when>
    <thetext>Comment on attachment 20978
Patch

I assume this is due to a change in the spec.  Could you note this in the changelog.
-    : Event(messageEvent, true, true)
+    : Event(messageEvent, false, true)
I don&apos;t think these need to take PassRefPtrs.  You are not transferring ownership, you just want the timer to ref the objects.
+    PostMessageTimer(PassRefPtr&lt;DOMWindow&gt; window, PassRefPtr&lt;MessageEvent&gt; event, PassRefPtr&lt;SecurityOrigin&gt; targetOrigin)


The leading { should be on its own line.  I am not sure about the &apos;delete this&apos;.  In the DOMWindowTimer case, we have the the postMessageTimerFired equivalent in JSDOMWindowBase delete the timer.  I think either is fine though.
+    virtual void fired() {
+        m_window-&gt;postMessageTimerFired(this);
+        delete this;
+    }

I think this would look better on one line.
+    PostMessageTimer* timer = new PostMessageTimer(
+            this, new MessageEvent(message, sourceOrigin, source), target);

Is the actual security check done in the postMessageTimerFired because of a possibility that the document has changed since the timer was fired?

This looks great.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79768</commentid>
    <comment_count>10</comment_count>
      <attachid>20989</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-05-06 14:21:01 -0700</bug_when>
    <thetext>Created attachment 20989
Updated patch to address Sam&apos;s comments

(In reply to comment #9)
&gt; (From update of attachment 20978 [edit])
&gt; I assume this is due to a change in the spec.  Could you note this in the
&gt; changelog.

Yes. I updated the changelog to mention the spec revision.

&gt; -    : Event(messageEvent, true, true)
&gt; +    : Event(messageEvent, false, true)
&gt; I don&apos;t think these need to take PassRefPtrs.  You are not transferring
&gt; ownership, you just want the timer to ref the objects.
&gt; +    PostMessageTimer(PassRefPtr&lt;DOMWindow&gt; window, PassRefPtr&lt;MessageEvent&gt;
&gt; event, PassRefPtr&lt;SecurityOrigin&gt; targetOrigin)

Done.

&gt; The leading { should be on its own line.  I am not sure about the &apos;delete
&gt; this&apos;.  In the DOMWindowTimer case, we have the the postMessageTimerFired
&gt; equivalent in JSDOMWindowBase delete the timer.  I think either is fine though.
&gt; +    virtual void fired() {
&gt; +        m_window-&gt;postMessageTimerFired(this);
&gt; +        delete this;
&gt; +    }

Changed.

&gt; I think this would look better on one line.
&gt; +    PostMessageTimer* timer = new PostMessageTimer(
&gt; +            this, new MessageEvent(message, sourceOrigin, source), target);

Done.

&gt; Is the actual security check done in the postMessageTimerFired because of a
&gt; possibility that the document has changed since the timer was fired?

Well, it could have changed since the timer was *scheduled*. I added a comment to this effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79772</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-05-06 15:04:08 -0700</bug_when>
    <thetext>Fix landed in r32922.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20850</attachid>
            <date>2008-04-27 10:50:22 -0700</date>
            <delta_ts>2008-04-27 10:53:12 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>async.patch</filename>
            <type>text/plain</type>
            <size>9238</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMzI2MDMpCisrKyBXZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VFdmVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDEsMTEgKzQyLDEyIEBAIE1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KCkK
IHsKIH0KIAotTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBj
b25zdCBTdHJpbmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UpCi0gICAgOiBFdmVudChtZXNz
YWdlRXZlbnQsIHRydWUsIHRydWUpCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgU2Vj
dXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbikKKyAgICA6IEV2ZW50KG1lc3NhZ2VFdmVudCwgZmFs
c2UsIHRydWUpCiAgICAgLCBtX2RhdGEoZGF0YSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAg
ICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1fdGFyZ2V0T3JpZ2luKHRhcmdldE9yaWdpbikK
IHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJldmlzaW9uIDMyNjAzKQorKysgV2ViQ29yZS9k
b20vTWVzc2FnZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRE9NV2luZG93OworICAgIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogCiAgICAgY2xhc3MgTWVzc2FnZUV2ZW50IDogcHVibGljIEV2ZW50IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIE1lc3NhZ2VFdmVudCgpOwotICAgICAgICBNZXNzYWdlRXZlbnQo
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3Vy
Y2UpOworICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJp
bmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmln
aW4pOwogICAgICAgICB2aXJ0dWFsIH5NZXNzYWdlRXZlbnQoKTsKIAogICAgICAgICB2b2lkIGlu
aXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBET01XaW5kb3cqIHNvdXJjZSk7CkBAIC00Nyw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CiAgICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KICAgICAgICAgRE9NV2luZG93KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5n
ZXQoKTsgfQorICAgICAgICBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXRPcmlnaW4uZ2V0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc01lc3NhZ2VFdmVudCgpIGNvbnN0OwogCkBAIC01NCw2ICs1Niw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAgU3RyaW5nIG1fb3Jp
Z2luOwogICAgICAgICBSZWZQdHI8RE9NV2luZG93PiBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX3RhcmdldE9yaWdpbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMzI2MDMpCisrKyBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw5IEBAIHZv
aWQgRE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KGNvbnN0IEYKIAogRE9NV2luZG93OjpET01X
aW5kb3coRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyNpZiBFTkFCTEUoQ1JP
U1NfRE9DVU1FTlRfTUVTU0FHSU5HKQorICAgICwgbV9wb3N0TWVzc2FnZVRpbWVyKHRoaXMsICZE
T01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZCkKKyNlbmRpZgogewogfQogCkBAIC0zMjIs
MzkgKzMyNSw3OSBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZSgpIGNvbnN0CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCi12b2lkIERPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRh
cmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjRm9yU2VuZGVy
KSBjb25zdAorY2xhc3MgUG9zdE1lc3NhZ2VUYXNrIHsKK3B1YmxpYzoKKyAgICBQb3N0TWVzc2Fn
ZVRhc2soUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiB0YXJnZXRPcmlnaW4pOworCisgICAgTWVzc2FnZUV2ZW50KiBldmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZXZlbnQuZ2V0KCk7IH0KKyAgICBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRPcmlnaW4uZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBtX2V2ZW50OworICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gbV90YXJnZXRPcmlnaW47Cit9OworCit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2lu
ZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9mcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF0YXJnZXRPcmlnaW4uaXNOdWxsKCkpIHsKLSAgICAg
ICAgS1VSTCBkZXNpcmVkVGFyZ2V0VVJMKHRhcmdldE9yaWdpbik7Ci0gICAgICAgIGlmICghZGVz
aXJlZFRhcmdldFVSTC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGVjRm9yU2VuZGVyID0gU1lO
VEFYX0VSUjsKKyAgICAvLyBDb21wdXRlIHRoZSB0YXJnZXQgb3JpZ2luLiAgV2UgbmVlZCB0byBk
byB0aGlzIHN5bmNocm9ub3VzbHkgaW4gb3JkZXIKKyAgICAvLyB0byBnZW5lcmF0ZSB0aGUgU1lO
VEFYX0VSUiBleGNlcHRpb24gY29ycmVjdGx5LgorICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
dGFyZ2V0OworICAgIGlmICh0YXJnZXRPcmlnaW4gIT0gIioiKSB7CisgICAgICAgIEtVUkwgdGFy
Z2V0VVJMKHRhcmdldE9yaWdpbik7CisgICAgICAgIGlmICghdGFyZ2V0VVJMLmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBkZXNpcmVkVGFyZ2V0T3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShkZXNpcmVkVGFyZ2V0VVJMKTsKLSAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIGFjdHVhbFRhcmdldE9yaWdpbiA9IGRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCk7Ci0gICAgICAgIGlmIChkZXNpcmVkVGFyZ2V0T3JpZ2luLT5pc0VtcHR5KCkgfHwg
IWRlc2lyZWRUYXJnZXRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0KGFjdHVhbFRhcmdldE9y
aWdpbikpIHsKLSAgICAgICAgICAgIC8vIFRoZSBzZW5kZXIgaXMgbm90IGFsbG93ZWQgdG8gZmlu
ZCBvdXQgdGhlIG9yaWdpbiBvZgotICAgICAgICAgICAgLy8gdGhlIHJlY2lwaWVudCwgc28gd2Ug
ZmFpbCBzaWxlbnRseSBhbmQgbG9nIGEgbWVzc2FnZQotICAgICAgICAgICAgLy8gdG8gdGhlIGNv
bnNvbGUuCi0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFi
bGUgdG8gcG9zdCBtZXNzYWdlIHRvICVzLiBSZWNpcGllbnQgaGFzIG9yaWdpbiAlcy5cbiIsIAot
ICAgICAgICAgICAgICAgIHRhcmdldE9yaWdpbi51dGY4KCkuZGF0YSgpLCBhY3R1YWxUYXJnZXRP
cmlnaW4tPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBjb25zb2xlKCkt
PmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwg
MCwgU3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIHRh
cmdldCA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodGFyZ2V0VVJMKTsKICAgICB9CiAKKyAgICAv
LyBDYXB0dXJlIHRoZSBzb3VyY2Ugb2YgdGhlIG1lc3NhZ2UuICBXZSBuZWVkIHRvIGRvIHRoaXMg
c3luY2hyb25vdXNseQorICAgIC8vIGluIG9yZGVyIHRvIGNhcHR1cmUgdGhlIHNvdXJjZSBvZiB0
aGUgbWVzc2FnZSBjb3JyZWN0bHkuCiAgICAgRG9jdW1lbnQqIHNvdXJjZURvY3VtZW50ID0gc291
cmNlLT5kb2N1bWVudCgpOwogICAgIGlmICghc291cmNlRG9jdW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICBTdHJpbmcgc291cmNlT3JpZ2luID0gc291cmNlRG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCk7CiAKLSAgICAvLyBTZW5kZXIgaXMgbm90IGFsbG93ZWQgdG8gc2Vl
IGV4Y2VwdGlvbnMgb3RoZXIgdGhhbiBzeW50YXggZXJyb3JzCi0gICAgRXhjZXB0aW9uQ29kZSBl
YzsgCi0gICAgZG9jdW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChuZXcgTWVzc2FnZUV2ZW50KG1lc3Nh
Z2UsIHNvdXJjZU9yaWdpbiwgc291cmNlKSwgZWMsIHRydWUpOworICAgIC8vIFNjaGVkdWxlIHRo
ZSBtZXNzYWdlLgorICAgIG1fcGVuZGluZ01lc3NhZ2VFdmVudHMuYXBwZW5kKG5ldyBNZXNzYWdl
RXZlbnQobWVzc2FnZSwgc291cmNlT3JpZ2luLCBzb3VyY2UsIHRhcmdldC5nZXQoKSkpOworICAg
IGlmICghbV9wb3N0TWVzc2FnZVRpbWVyLmlzQWN0aXZlKCkpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICBtX3Bvc3RNZXNzYWdlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQor
Cit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFRpbWVyPERPTVdpbmRvdz4q
KQoreworICAgIFZlY3RvcjxNZXNzYWdlRXZlbnQqPiBwZW5kaW5nTWVzc2FnZUV2ZW50czsKKyAg
ICBtX3BlbmRpbmdNZXNzYWdlRXZlbnRzLnN3YXAocGVuZGluZ01lc3NhZ2VFdmVudHMpOworCisg
ICAgVmVjdG9yPE1lc3NhZ2VFdmVudCo+OjppdGVyYXRvciBlbmQgPSBwZW5kaW5nTWVzc2FnZUV2
ZW50cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxNZXNzYWdlRXZlbnQqPjo6aXRlcmF0b3IgaXQg
PSBwZW5kaW5nTWVzc2FnZUV2ZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgLy8gU3RvcmUgdGhlIGV2ZW50IGluIGEgUmVmUHRyIHRvIGd1YXJhbnRlZSB0aGF0IGF0IGxl
YXN0IG9uZSBvYmplY3QKKyAgICAgICAgLy8gdGFrZXMgYSByZWZlcmVuY2UgKGFuZCBoZW5jZSB0
aGUgZXZlbnQgd2lsbCBiZSBkZWxldGVkKS4KKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4g
ZXZlbnQgPSAqaXQ7CisgICAgICAgIAorICAgICAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoZXZlbnQtPnRhcmdldE9yaWdpbigpKSB7Cisg
ICAgICAgICAgICBpZiAoIWV2ZW50LT50YXJnZXRPcmlnaW4oKS0+aXNTYW1lU2NoZW1lSG9zdFBv
cnQoZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGUgc2VuZGVyIGlzIG5vdCBhbGxvd2VkIHRvIGZpbmQgb3V0IHRoZSBvcmlnaW4gb2YKKyAgICAg
ICAgICAgICAgICAvLyB0aGUgcmVjaXBpZW50LCBzbyB3ZSBmYWlsIHNpbGVudGx5IGFuZCBsb2cg
YSBtZXNzYWdlCisgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGNvbnNvbGUuCisgICAgICAgICAg
ICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIHBvc3QgbWVz
c2FnZSB0byAlcy4gUmVjaXBpZW50IGhhcyBvcmlnaW4gJXMuXG4iLCAKKyAgICAgICAgICAgICAg
ICAgICAgZXZlbnQtPnRhcmdldE9yaWdpbigpLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgY29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJy
b3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAsIFN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlbmRlciBp
cyBub3QgYWxsb3dlZCB0byBzZWUgZXhjZXB0aW9ucy4KKyAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgICAgIGRvY3VtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCksIGVj
LCB0cnVlKTsKKyAgICB9CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gMzI2
MDMpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgRE9NV2luZG93X2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDgsNiAr
NDksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3Mg
SGlzdG9yeTsKICAgICBjbGFzcyBMb2NhdGlvbjsKKyNpZiBFTkFCTEUoQ1JPU1NfRE9DVU1FTlRf
TUVTU0FHSU5HKQorICAgIGNsYXNzIE1lc3NhZ2VFdmVudDsKKyNlbmRpZgogICAgIGNsYXNzIE5h
dmlnYXRvcjsKICAgICBjbGFzcyBTY3JlZW47CiAKQEAgLTU2LDYgKzYwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIFN0b3JhZ2U7CiAjZW5kaWYKIAorCiAgICAgdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAogICAgIGNsYXNzIERPTVdpbmRvdyA6IHB1YmxpYyBSZWZDb3Vu
dGVkPERPTVdpbmRvdz4gewpAQCAtMTY1LDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25DYWNoZSgpIGNvbnN0Owog
I2VuZGlmCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKLSAgICAgICAgdm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
T3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWNGb3JTZW5kZXIpIGNv
bnN0OworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2Rl
JiBlYyk7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5KGludCB4LCBpbnQgeSkgY29u
c3Q7CkBAIC0yMDIsNiArMjA3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBET01XaW5kb3coRnJhbWUqKTsKKyNpZiBFTkFCTEUoQ1JPU1Nf
RE9DVU1FTlRfTUVTU0FHSU5HKQorICAgICAgICB2b2lkIHBvc3RNZXNzYWdlVGltZXJGaXJlZChU
aW1lcjxET01XaW5kb3c+Kik7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIEZyYW1lKiBtX2Zy
YW1lOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTY3JlZW4+IG1fc2NyZWVuOwpAQCAtMjIzLDYg
KzIzMSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8RE9NQXBwbGljYXRpb25DYWNoZT4g
bV9hcHBsaWNhdGlvbkNhY2hlOwogI2VuZGlmCisjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01F
U1NBR0lORykKKyAgICAgICAgVGltZXI8RE9NV2luZG93PiBtX3Bvc3RNZXNzYWdlVGltZXI7Cisg
ICAgICAgIFZlY3RvcjxNZXNzYWdlRXZlbnQqPiBtX3BlbmRpbmdNZXNzYWdlRXZlbnRzOworI2Vu
ZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJ
KHJldmlzaW9uIDMyNjAzKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBtb2R1bGUgd2luZG93IHsKIAogI2lmIGRlZmluZWQo
RU5BQkxFX0NST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKICAgICAgICAgLy8gY3Jvc3MtZG9jdW1l
bnQgbWVzc2FnaW5nCi0gICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIEN1c3RvbV0g
dm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBET01T
dHJpbmcgdGFyZ2V0T3JpZ2luKQorICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBD
dXN0b21dIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIERPTVN0cmlu
ZyB0YXJnZXRPcmlnaW4pCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICNlbmRp
ZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20851</attachid>
            <date>2008-04-27 10:53:12 -0700</date>
            <delta_ts>2008-04-29 21:37:35 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>async.patch</filename>
            <type>text/plain</type>
            <size>8876</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMzI2MDMpCisrKyBXZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VFdmVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDEsMTEgKzQyLDEyIEBAIE1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KCkK
IHsKIH0KIAotTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBj
b25zdCBTdHJpbmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UpCi0gICAgOiBFdmVudChtZXNz
YWdlRXZlbnQsIHRydWUsIHRydWUpCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgU2Vj
dXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbikKKyAgICA6IEV2ZW50KG1lc3NhZ2VFdmVudCwgZmFs
c2UsIHRydWUpCiAgICAgLCBtX2RhdGEoZGF0YSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAg
ICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1fdGFyZ2V0T3JpZ2luKHRhcmdldE9yaWdpbikK
IHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJldmlzaW9uIDMyNjAzKQorKysgV2ViQ29yZS9k
b20vTWVzc2FnZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRE9NV2luZG93OworICAgIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogCiAgICAgY2xhc3MgTWVzc2FnZUV2ZW50IDogcHVibGljIEV2ZW50IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIE1lc3NhZ2VFdmVudCgpOwotICAgICAgICBNZXNzYWdlRXZlbnQo
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3Vy
Y2UpOworICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJp
bmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmln
aW4pOwogICAgICAgICB2aXJ0dWFsIH5NZXNzYWdlRXZlbnQoKTsKIAogICAgICAgICB2b2lkIGlu
aXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBET01XaW5kb3cqIHNvdXJjZSk7CkBAIC00Nyw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CiAgICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KICAgICAgICAgRE9NV2luZG93KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5n
ZXQoKTsgfQorICAgICAgICBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXRPcmlnaW4uZ2V0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc01lc3NhZ2VFdmVudCgpIGNvbnN0OwogCkBAIC01NCw2ICs1Niw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAgU3RyaW5nIG1fb3Jp
Z2luOwogICAgICAgICBSZWZQdHI8RE9NV2luZG93PiBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX3RhcmdldE9yaWdpbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMzI2MDMpCisrKyBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw5IEBAIHZv
aWQgRE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KGNvbnN0IEYKIAogRE9NV2luZG93OjpET01X
aW5kb3coRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyNpZiBFTkFCTEUoQ1JP
U1NfRE9DVU1FTlRfTUVTU0FHSU5HKQorICAgICwgbV9wb3N0TWVzc2FnZVRpbWVyKHRoaXMsICZE
T01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZCkKKyNlbmRpZgogewogfQogCkBAIC0zMjIs
MzkgKzMyNSw2NyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZSgpIGNvbnN0CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCi12b2lkIERPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRh
cmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjRm9yU2VuZGVy
KSBjb25zdAordm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghdGFyZ2V0T3JpZ2luLmlzTnVsbCgpKSB7Ci0gICAgICAgIEtVUkwgZGVzaXJlZFRhcmdl
dFVSTCh0YXJnZXRPcmlnaW4pOwotICAgICAgICBpZiAoIWRlc2lyZWRUYXJnZXRVUkwuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICBlY0ZvclNlbmRlciA9IFNZTlRBWF9FUlI7CisgICAgLy8gQ29t
cHV0ZSB0aGUgdGFyZ2V0IG9yaWdpbi4gIFdlIG5lZWQgdG8gZG8gdGhpcyBzeW5jaHJvbm91c2x5
IGluIG9yZGVyCisgICAgLy8gdG8gZ2VuZXJhdGUgdGhlIFNZTlRBWF9FUlIgZXhjZXB0aW9uIGNv
cnJlY3RseS4KKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldDsKKyAgICBpZiAodGFy
Z2V0T3JpZ2luICE9ICIqIikgeworICAgICAgICBLVVJMIHRhcmdldFVSTCh0YXJnZXRPcmlnaW4p
OworICAgICAgICBpZiAoIXRhcmdldFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gZGVzaXJlZFRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUoZGVzaXJlZFRhcmdldFVSTCk7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBhY3R1
YWxUYXJnZXRPcmlnaW4gPSBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgICAgICBp
ZiAoZGVzaXJlZFRhcmdldE9yaWdpbi0+aXNFbXB0eSgpIHx8ICFkZXNpcmVkVGFyZ2V0T3JpZ2lu
LT5pc1NhbWVTY2hlbWVIb3N0UG9ydChhY3R1YWxUYXJnZXRPcmlnaW4pKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgc2VuZGVyIGlzIG5vdCBhbGxvd2VkIHRvIGZpbmQgb3V0IHRoZSBvcmlnaW4gb2YK
LSAgICAgICAgICAgIC8vIHRoZSByZWNpcGllbnQsIHNvIHdlIGZhaWwgc2lsZW50bHkgYW5kIGxv
ZyBhIG1lc3NhZ2UKLSAgICAgICAgICAgIC8vIHRvIHRoZSBjb25zb2xlLgotICAgICAgICAgICAg
U3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0
byAlcy4gUmVjaXBpZW50IGhhcyBvcmlnaW4gJXMuXG4iLCAKLSAgICAgICAgICAgICAgICB0YXJn
ZXRPcmlnaW4udXRmOCgpLmRhdGEoKSwgYWN0dWFsVGFyZ2V0T3JpZ2luLT50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2Fn
ZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAsIFN0cmluZygpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICB0YXJnZXQgPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKHRhcmdldFVSTCk7CiAgICAgfQogCisgICAgLy8gQ2FwdHVyZSB0aGUgc291cmNl
IG9mIHRoZSBtZXNzYWdlLiAgV2UgbmVlZCB0byBkbyB0aGlzIHN5bmNocm9ub3VzbHkKKyAgICAv
LyBpbiBvcmRlciB0byBjYXB0dXJlIHRoZSBzb3VyY2Ugb2YgdGhlIG1lc3NhZ2UgY29ycmVjdGx5
LgogICAgIERvY3VtZW50KiBzb3VyY2VEb2N1bWVudCA9IHNvdXJjZS0+ZG9jdW1lbnQoKTsKICAg
ICBpZiAoIXNvdXJjZURvY3VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgU3RyaW5nIHNvdXJj
ZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOwog
Ci0gICAgLy8gU2VuZGVyIGlzIG5vdCBhbGxvd2VkIHRvIHNlZSBleGNlcHRpb25zIG90aGVyIHRo
YW4gc3ludGF4IGVycm9ycwotICAgIEV4Y2VwdGlvbkNvZGUgZWM7IAotICAgIGRvY3VtZW50KCkt
PmRpc3BhdGNoRXZlbnQobmV3IE1lc3NhZ2VFdmVudChtZXNzYWdlLCBzb3VyY2VPcmlnaW4sIHNv
dXJjZSksIGVjLCB0cnVlKTsKKyAgICAvLyBTY2hlZHVsZSB0aGUgbWVzc2FnZS4KKyAgICBtX3Bl
bmRpbmdNZXNzYWdlRXZlbnRzLmFwcGVuZChuZXcgTWVzc2FnZUV2ZW50KG1lc3NhZ2UsIHNvdXJj
ZU9yaWdpbiwgc291cmNlLCB0YXJnZXQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fcG9zdE1lc3NhZ2VU
aW1lci5pc0FjdGl2ZSgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9w
b3N0TWVzc2FnZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBET01XaW5kb3c6OnBv
c3RNZXNzYWdlVGltZXJGaXJlZChUaW1lcjxET01XaW5kb3c+KikKK3sKKyAgICBWZWN0b3I8TWVz
c2FnZUV2ZW50Kj4gcGVuZGluZ01lc3NhZ2VFdmVudHM7CisgICAgbV9wZW5kaW5nTWVzc2FnZUV2
ZW50cy5zd2FwKHBlbmRpbmdNZXNzYWdlRXZlbnRzKTsKKworICAgIFZlY3RvcjxNZXNzYWdlRXZl
bnQqPjo6aXRlcmF0b3IgZW5kID0gcGVuZGluZ01lc3NhZ2VFdmVudHMuZW5kKCk7CisgICAgZm9y
IChWZWN0b3I8TWVzc2FnZUV2ZW50Kj46Oml0ZXJhdG9yIGl0ID0gcGVuZGluZ01lc3NhZ2VFdmVu
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIFN0b3JlIHRoZSBldmVu
dCBpbiBhIFJlZlB0ciB0byBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdCBvbmUgb2JqZWN0CisgICAg
ICAgIC8vIHRha2VzIGEgcmVmZXJlbmNlIChhbmQgaGVuY2UgdGhlIGV2ZW50IHdpbGwgYmUgZGVs
ZXRlZCkuCisgICAgICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gKml0OworICAgICAg
ICAKKyAgICAgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKGV2ZW50LT50YXJnZXRPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKCFldmVu
dC0+dGFyZ2V0T3JpZ2luKCktPmlzU2FtZVNjaGVtZUhvc3RQb3J0KGRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNlbmRlciBpcyBub3QgYWxs
b3dlZCB0byBmaW5kIG91dCB0aGUgb3JpZ2luIG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIHJl
Y2lwaWVudCwgc28gd2UgZmFpbCBzaWxlbnRseSBhbmQgbG9nIGEgbWVzc2FnZQorICAgICAgICAg
ICAgICAgIC8vIHRvIHRoZSBjb25zb2xlLgorICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIlVuYWJsZSB0byBwb3N0IG1lc3NhZ2UgdG8gJXMuIFJlY2lwaWVu
dCBoYXMgb3JpZ2luICVzLlxuIiwgCisgICAgICAgICAgICAgICAgICAgIGV2ZW50LT50YXJnZXRP
cmlnaW4oKS0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBkb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNvbnNv
bGUoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNz
YWdlLCAwLCBTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTZW5kZXIgaXMgbm90IGFsbG93ZWQgdG8gc2Vl
IGV4Y2VwdGlvbnMuCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBkb2N1
bWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpLCBlYywgdHJ1ZSk7CisgICAgfQogfQog
I2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDMyNjAzKQorKysgV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIERP
TVdpbmRvd19oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ4LDYgKzQ5LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEhpc3Rvcnk7CiAgICAgY2xhc3Mg
TG9jYXRpb247CisjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKKyAgICBjbGFz
cyBNZXNzYWdlRXZlbnQ7CisjZW5kaWYKICAgICBjbGFzcyBOYXZpZ2F0b3I7CiAgICAgY2xhc3Mg
U2NyZWVuOwogCkBAIC01Niw2ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTdG9yYWdlOwogI2VuZGlmCiAKKwogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAK
ICAgICBjbGFzcyBET01XaW5kb3cgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XaW5kb3c+IHsKQEAg
LTE2NSw3ICsxNzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERPTUFwcGxpY2F0
aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdDsKICNlbmRpZgogI2lmIEVOQUJMRShD
Uk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCi0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBz
b3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjRm9yU2VuZGVyKSBjb25zdDsKKyAgICAgICAgdm9pZCBw
b3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0T3Jp
Z2luLCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwogI2VuZGlmCiAKICAg
ICAgICAgdm9pZCBzY3JvbGxCeShpbnQgeCwgaW50IHkpIGNvbnN0OwpAQCAtMjAyLDYgKzIwNyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAg
RE9NV2luZG93KEZyYW1lKik7CisjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykK
KyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZVRpbWVyRmlyZWQoVGltZXI8RE9NV2luZG93PiopOwor
I2VuZGlmCiAgICAgICAgIAogICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U2NyZWVuPiBtX3NjcmVlbjsKQEAgLTIyMyw2ICsyMzEsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAg
IG11dGFibGUgUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNoZTsK
ICNlbmRpZgorI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCisgICAgICAgIFRp
bWVyPERPTVdpbmRvdz4gbV9wb3N0TWVzc2FnZVRpbWVyOworICAgICAgICBWZWN0b3I8TWVzc2Fn
ZUV2ZW50Kj4gbV9wZW5kaW5nTWVzc2FnZUV2ZW50czsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiAzMjYwMykKKysr
IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4
LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9DUk9TU19ET0NVTUVO
VF9NRVNTQUdJTkcpCiAgICAgICAgIC8vIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZwotICAgICAg
ICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBDdXN0b21dIHZvaWQgcG9zdE1lc3NhZ2UoaW4g
RE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIHRhcmdldE9yaWdpbikK
KyAgICAgICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ3VzdG9tXSB2b2lkIHBvc3RNZXNz
YWdlKGluIERPTVN0cmluZyBtZXNzYWdlLCBpbiBET01TdHJpbmcgdGFyZ2V0T3JpZ2luKQogICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20896</attachid>
            <date>2008-04-29 21:37:35 -0700</date>
            <delta_ts>2008-05-05 21:01:09 -0700</delta_ts>
            <desc>Work in progress, no clustering</desc>
            <filename>async2.patch</filename>
            <type>text/plain</type>
            <size>6364</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMzI2MDMpCisrKyBXZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIE1lc3NhZ2VF
dmVudDo6TWVzc2FnZUV2ZW50KCkKIH0KIAogTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2Up
Ci0gICAgOiBFdmVudChtZXNzYWdlRXZlbnQsIHRydWUsIHRydWUpCisgICAgOiBFdmVudChtZXNz
YWdlRXZlbnQsIGZhbHNlLCB0cnVlKQogICAgICwgbV9kYXRhKGRhdGEpCiAgICAgLCBtX29yaWdp
bihvcmlnaW4pCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2
aXNpb24gMzI2MDMpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNiArNzgsMzEgQEAgdXNpbmcgc3RkOjptYXg7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCitjbGFzcyBQb3N0TWVz
c2FnZVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgUG9zdE1lc3NhZ2VU
aW1lcihET01XaW5kb3cqIHdpbmRvdywgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0YXJnZXRPcmlnaW4pCisgICAgICAgIDogbV93aW5k
b3cod2luZG93KQorICAgICAgICAsIG1fZXZlbnQoZXZlbnQpCisgICAgICAgICwgbV90YXJnZXRP
cmlnaW4odGFyZ2V0T3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBNZXNzYWdlRXZlbnQqIGV2
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsgfQorICAgIFNlY3VyaXR5T3JpZ2lu
KiB0YXJnZXRPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldE9yaWdpbi5nZXQoKTsgfQor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIHsKKyAgICAgICAgbV93aW5kb3ct
PnBvc3RNZXNzYWdlVGltZXJGaXJlZCh0aGlzKTsKKyAgICAgICAgLy8gTm90ZTogdGhpcyBvYmpl
Y3QgaGFzIGxpa2VseSBiZWVuIGRlbGV0ZWQgYXQgdGhpcyBwb2ludC4KKyAgICB9CisKKyAgICBE
T01XaW5kb3cqIG1fd2luZG93OworICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IG1fZXZlbnQ7Cisg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3RhcmdldE9yaWdpbjsKK307CisjZW5kaWYKKwog
Ly8gVGhpcyBmdW5jdGlvbjoKIC8vIDEpIFZhbGlkYXRlcyB0aGUgcGVuZGluZyBjaGFuZ2VzIGFy
ZSBub3QgY2hhbmdpbmcgdG8gTmFOCiAvLyAyKSBDb25zdHJhaW5zIHRoZSB3aW5kb3cgcmVjdCB0
byBubyBzbWFsbGVyIHRoYW4gMTAwIGluIGVhY2ggZGltZW5zaW9uIGFuZCBubwpAQCAtMzIyLDM5
ICszNDcsNjAgQEAgU3RvcmFnZSogRE9NV2luZG93Ojpsb2NhbFN0b3JhZ2UoKSBjb25zdAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HKQotdm9pZCBET01XaW5k
b3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0YXJn
ZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlY0ZvclNlbmRlcikg
Y29uc3QKK3ZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGNvbnN0IFN0cmluZyYgdGFyZ2V0T3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIXRhcmdldE9yaWdpbi5pc051bGwoKSkgewotICAgICAgICBLVVJMIGRlc2lyZWRUYXJnZXRV
UkwodGFyZ2V0T3JpZ2luKTsKLSAgICAgICAgaWYgKCFkZXNpcmVkVGFyZ2V0VVJMLmlzVmFsaWQo
KSkgewotICAgICAgICAgICAgZWNGb3JTZW5kZXIgPSBTWU5UQVhfRVJSOworICAgIC8vIENvbXB1
dGUgdGhlIHRhcmdldCBvcmlnaW4uICBXZSBuZWVkIHRvIGRvIHRoaXMgc3luY2hyb25vdXNseSBp
biBvcmRlcgorICAgIC8vIHRvIGdlbmVyYXRlIHRoZSBTWU5UQVhfRVJSIGV4Y2VwdGlvbiBjb3Jy
ZWN0bHkuCisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0YXJnZXQ7CisgICAgaWYgKHRhcmdl
dE9yaWdpbiAhPSAiKiIpIHsKKyAgICAgICAgS1VSTCB0YXJnZXRVUkwodGFyZ2V0T3JpZ2luKTsK
KyAgICAgICAgaWYgKCF0YXJnZXRVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IGRlc2lyZWRUYXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKGRlc2lyZWRUYXJnZXRVUkwpOwotICAgICAgICBTZWN1cml0eU9yaWdpbiogYWN0dWFs
VGFyZ2V0T3JpZ2luID0gZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICAgICAgaWYg
KGRlc2lyZWRUYXJnZXRPcmlnaW4tPmlzRW1wdHkoKSB8fCAhZGVzaXJlZFRhcmdldE9yaWdpbi0+
aXNTYW1lU2NoZW1lSG9zdFBvcnQoYWN0dWFsVGFyZ2V0T3JpZ2luKSkgeworICAgICAgICB0YXJn
ZXQgPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRhcmdldFVSTCk7CisgICAgfQorCisgICAgLy8g
Q2FwdHVyZSB0aGUgc291cmNlIG9mIHRoZSBtZXNzYWdlLiAgV2UgbmVlZCB0byBkbyB0aGlzIHN5
bmNocm9ub3VzbHkKKyAgICAvLyBpbiBvcmRlciB0byBjYXB0dXJlIHRoZSBzb3VyY2Ugb2YgdGhl
IG1lc3NhZ2UgY29ycmVjdGx5LgorICAgIERvY3VtZW50KiBzb3VyY2VEb2N1bWVudCA9IHNvdXJj
ZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIXNvdXJjZURvY3VtZW50KQorICAgICAgICByZXR1cm47
CisgICAgU3RyaW5nIHNvdXJjZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLT50b1N0cmluZygpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIG1lc3NhZ2UuCisgICAgUG9z
dE1lc3NhZ2VUaW1lciogdGltZXIgPSBuZXcgUG9zdE1lc3NhZ2VUaW1lcigKKyAgICAgICAgICAg
IHRoaXMsIG5ldyBNZXNzYWdlRXZlbnQobWVzc2FnZSwgc291cmNlT3JpZ2luLCBzb3VyY2UpLCB0
YXJnZXQpOworICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgRE9NV2luZG93
Ojpwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9zdE1lc3NhZ2VUaW1lciogdCkKK3sKKyAgICAvLyBT
dG9yZSB0aGUgdGltZXIgaW4gYW4gT3duUHRyIHRvIGVuc3VyZSB3ZSBkZWxldGUgaXQuCisgICAg
T3duUHRyPFBvc3RNZXNzYWdlVGltZXI+IHRpbWVyKHQpOworCisgICAgaWYgKCFkb2N1bWVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGltZXItPnRhcmdldE9yaWdpbigpKSB7Cisg
ICAgICAgIGlmICghdGltZXItPnRhcmdldE9yaWdpbigpLT5pc1NhbWVTY2hlbWVIb3N0UG9ydChk
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkgewogICAgICAgICAgICAgLy8gVGhlIHNlbmRl
ciBpcyBub3QgYWxsb3dlZCB0byBmaW5kIG91dCB0aGUgb3JpZ2luIG9mCiAgICAgICAgICAgICAv
LyB0aGUgcmVjaXBpZW50LCBzbyB3ZSBmYWlsIHNpbGVudGx5IGFuZCBsb2cgYSBtZXNzYWdlCiAg
ICAgICAgICAgICAvLyB0byB0aGUgY29uc29sZS4KICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIlVuYWJsZSB0byBwb3N0IG1lc3NhZ2UgdG8gJXMuIFJlY2lwaWVu
dCBoYXMgb3JpZ2luICVzLlxuIiwgCi0gICAgICAgICAgICAgICAgdGFyZ2V0T3JpZ2luLnV0Zjgo
KS5kYXRhKCksIGFjdHVhbFRhcmdldE9yaWdpbi0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICB0aW1lci0+dGFyZ2V0T3JpZ2luKCktPnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgICAgIGNvbnNvbGUoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3Vy
Y2UsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCAwLCBTdHJpbmcoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBEb2N1bWVudCogc291cmNlRG9jdW1l
bnQgPSBzb3VyY2UtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFzb3VyY2VEb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBzb3VyY2VEb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKLQotICAgIC8vIFNlbmRlciBpcyBub3QgYWxsb3dl
ZCB0byBzZWUgZXhjZXB0aW9ucyBvdGhlciB0aGFuIHN5bnRheCBlcnJvcnMKLSAgICBFeGNlcHRp
b25Db2RlIGVjOyAKLSAgICBkb2N1bWVudCgpLT5kaXNwYXRjaEV2ZW50KG5ldyBNZXNzYWdlRXZl
bnQobWVzc2FnZSwgc291cmNlT3JpZ2luLCBzb3VyY2UpLCBlYywgdHJ1ZSk7CisgICAgLy8gU2Vu
ZGVyIGlzIG5vdCBhbGxvd2VkIHRvIHNlZSBleGNlcHRpb25zLgorICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGRvY3VtZW50KCktPmRpc3BhdGNoRXZlbnQodGltZXItPmV2ZW50KCksIGVj
LCB0cnVlKTsKIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCShyZXZpc2lvbiAzMjYwMykKKysr
IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9y
eTsKICAgICBjbGFzcyBMb2NhdGlvbjsKKyNpZiBFTkFCTEUoQ1JPU1NfRE9DVU1FTlRfTUVTU0FH
SU5HKQorICAgIGNsYXNzIFBvc3RNZXNzYWdlVGltZXI7CisjZW5kaWYKICAgICBjbGFzcyBOYXZp
Z2F0b3I7CiAgICAgY2xhc3MgU2NyZWVuOwogCkBAIC0xNjUsNyArMTY4LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbkNhY2hl
KCkgY29uc3Q7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HKQot
ICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlY0Zv
clNlbmRlcikgY29uc3Q7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9z
dE1lc3NhZ2VUaW1lciopOwogI2VuZGlmCiAKICAgICAgICAgdm9pZCBzY3JvbGxCeShpbnQgeCwg
aW50IHkpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDMyNjAzKQorKysgV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBA
QCBtb2R1bGUgd2luZG93IHsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0NST1NTX0RPQ1VNRU5UX01F
U1NBR0lORykKICAgICAgICAgLy8gY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nCi0gICAgICAgIFtE
b05vdENoZWNrRG9tYWluU2VjdXJpdHksIEN1c3RvbV0gdm9pZCBwb3N0TWVzc2FnZShpbiBET01T
dHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgdGFyZ2V0T3JpZ2luKQorICAg
ICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBDdXN0b21dIHZvaWQgcG9zdE1lc3NhZ2Uo
aW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIERPTVN0cmluZyB0YXJnZXRPcmlnaW4pCiAgICAgICAg
ICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20978</attachid>
            <date>2008-05-05 21:00:27 -0700</date>
            <delta_ts>2008-05-06 14:21:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>async3.patch</filename>
            <type>text/plain</type>
            <size>31048</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMjg5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDgtMDUtMDUgIEFkYW0gQmFydGggIDxhYmFydGgtd2Via2l0QGFk
YW1iYXJ0aC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzI1CisgICAg
ICAgIEltcGxlbWVudCBhc3luY2hyb25vdXMgcG9zdE1lc3NhZ2UuCisKKyAgICAgICAgQ29sbGlu
IEphY2tzb24gPGNvbGxpbmotd2Via2l0QGNvbGxpbmphY2tzb24uY29tPiBhbHNvIGNvbnRyaWJ1
dGVkIHRvIHRoaXMgcGF0Y2guCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1cml0eS9w
b3N0TWVzc2FnZS9kZWxpdmVyeS1vcmRlci5odG1sCisKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KToK
KyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3N0TWVz
c2FnZVRpbWVyOjpQb3N0TWVzc2FnZVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNz
YWdlVGltZXI6OmV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNzYWdlVGltZXI6OnRh
cmdldE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQb3N0TWVzc2FnZVRpbWVyOjpmaXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKToKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgCiAy
MDA4LTA1LTA1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNaXR6IFBldHRlbCBSVEwKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNp
b24gMzI4MzApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIE1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KCkKIH0KIAogTWVz
c2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcm
IG9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UpCi0gICAgOiBFdmVudChtZXNzYWdlRXZlbnQsIHRy
dWUsIHRydWUpCisgICAgOiBFdmVudChtZXNzYWdlRXZlbnQsIGZhbHNlLCB0cnVlKQogICAgICwg
bV9kYXRhKGRhdGEpCiAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMzI4MzApCisrKyBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMzEgQEAgdXNpbmcgc3Rk
OjptYXg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShDUk9TU19ET0NVTUVO
VF9NRVNTQUdJTkcpCitjbGFzcyBQb3N0TWVzc2FnZVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7
CitwdWJsaWM6CisgICAgUG9zdE1lc3NhZ2VUaW1lcihQYXNzUmVmUHRyPERPTVdpbmRvdz4gd2lu
ZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHRhcmdldE9yaWdpbikKKyAgICAgICAgOiBtX3dpbmRvdyh3aW5kb3cpCisgICAgICAg
ICwgbV9ldmVudChldmVudCkKKyAgICAgICAgLCBtX3RhcmdldE9yaWdpbih0YXJnZXRPcmlnaW4p
CisgICAgeworICAgIH0KKworICAgIE1lc3NhZ2VFdmVudCogZXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX2V2ZW50LmdldCgpOyB9CisgICAgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0T3JpZ2luLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGZpcmVkKCkgeworICAgICAgICBtX3dpbmRvdy0+cG9zdE1lc3NhZ2VUaW1lckZp
cmVkKHRoaXMpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9N
V2luZG93PiBtX3dpbmRvdzsKKyAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBtX2V2ZW50OworICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV90YXJnZXRPcmlnaW47Cit9OworI2VuZGlmCisKIC8v
IFRoaXMgZnVuY3Rpb246CiAvLyAxKSBWYWxpZGF0ZXMgdGhlIHBlbmRpbmcgY2hhbmdlcyBhcmUg
bm90IGNoYW5naW5nIHRvIE5hTgogLy8gMikgQ29uc3RyYWlucyB0aGUgd2luZG93IHJlY3QgdG8g
bm8gc21hbGxlciB0aGFuIDEwMCBpbiBlYWNoIGRpbWVuc2lvbiBhbmQgbm8KQEAgLTMyMywzOSAr
MzQ4LDUxIEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKLXZvaWQgRE9NV2luZG93
Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
T3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWNGb3JTZW5kZXIpIGNv
bnN0Cit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCF0YXJnZXRPcmlnaW4uaXNOdWxsKCkpIHsKLSAgICAgICAgS1VSTCBkZXNpcmVkVGFyZ2V0VVJM
KHRhcmdldE9yaWdpbik7Ci0gICAgICAgIGlmICghZGVzaXJlZFRhcmdldFVSTC5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgIGVjRm9yU2VuZGVyID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gZGVzaXJl
ZFRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoZGVzaXJlZFRhcmdldFVSTCk7
Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBhY3R1YWxUYXJnZXRPcmlnaW4gPSBkb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpOwotICAgICAgICBpZiAoZGVzaXJlZFRhcmdldE9yaWdpbi0+aXNF
bXB0eSgpIHx8ICFkZXNpcmVkVGFyZ2V0T3JpZ2luLT5pc1NhbWVTY2hlbWVIb3N0UG9ydChhY3R1
YWxUYXJnZXRPcmlnaW4pKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc2VuZGVyIGlzIG5vdCBhbGxv
d2VkIHRvIGZpbmQgb3V0IHRoZSBvcmlnaW4gb2YKLSAgICAgICAgICAgIC8vIHRoZSByZWNpcGll
bnQsIHNvIHdlIGZhaWwgc2lsZW50bHkgYW5kIGxvZyBhIG1lc3NhZ2UKLSAgICAgICAgICAgIC8v
IHRvIHRoZSBjb25zb2xlLgotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZv
cm1hdCgiVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byAlcy4gUmVjaXBpZW50IGhhcyBvcmlnaW4g
JXMuXG4iLCAKLSAgICAgICAgICAgICAgICB0YXJnZXRPcmlnaW4udXRmOCgpLmRhdGEoKSwgYWN0
dWFsVGFyZ2V0T3JpZ2luLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAg
Y29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWws
IG1lc3NhZ2UsIDAsIFN0cmluZygpKTsKKyAgICAvLyBDb21wdXRlIHRoZSB0YXJnZXQgb3JpZ2lu
LiAgV2UgbmVlZCB0byBkbyB0aGlzIHN5bmNocm9ub3VzbHkgaW4gb3JkZXIKKyAgICAvLyB0byBn
ZW5lcmF0ZSB0aGUgU1lOVEFYX0VSUiBleGNlcHRpb24gY29ycmVjdGx5LgorICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gdGFyZ2V0OworICAgIGlmICh0YXJnZXRPcmlnaW4gIT0gIioiKSB7Cisg
ICAgICAgIHRhcmdldCA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTCh0YXJnZXRPcmlnaW4p
KTsKKyAgICAgICAgaWYgKHRhcmdldC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAv
LyBDYXB0dXJlIHRoZSBzb3VyY2Ugb2YgdGhlIG1lc3NhZ2UuICBXZSBuZWVkIHRvIGRvIHRoaXMg
c3luY2hyb25vdXNseQorICAgIC8vIGluIG9yZGVyIHRvIGNhcHR1cmUgdGhlIHNvdXJjZSBvZiB0
aGUgbWVzc2FnZSBjb3JyZWN0bHkuCiAgICAgRG9jdW1lbnQqIHNvdXJjZURvY3VtZW50ID0gc291
cmNlLT5kb2N1bWVudCgpOwogICAgIGlmICghc291cmNlRG9jdW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICBTdHJpbmcgc291cmNlT3JpZ2luID0gc291cmNlRG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCk7CiAKLSAgICAvLyBTZW5kZXIgaXMgbm90IGFsbG93ZWQgdG8gc2Vl
IGV4Y2VwdGlvbnMgb3RoZXIgdGhhbiBzeW50YXggZXJyb3JzCi0gICAgRXhjZXB0aW9uQ29kZSBl
YzsgCi0gICAgZG9jdW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChuZXcgTWVzc2FnZUV2ZW50KG1lc3Nh
Z2UsIHNvdXJjZU9yaWdpbiwgc291cmNlKSwgZWMsIHRydWUpOworICAgIC8vIFNjaGVkdWxlIHRo
ZSBtZXNzYWdlLgorICAgIFBvc3RNZXNzYWdlVGltZXIqIHRpbWVyID0gbmV3IFBvc3RNZXNzYWdl
VGltZXIoCisgICAgICAgICAgICB0aGlzLCBuZXcgTWVzc2FnZUV2ZW50KG1lc3NhZ2UsIHNvdXJj
ZU9yaWdpbiwgc291cmNlKSwgdGFyZ2V0KTsKKyAgICB0aW1lci0+c3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGlt
ZXIqIHRpbWVyKQoreworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHRpbWVyLT50YXJnZXRPcmlnaW4oKSkgeworICAgICAgICBpZiAoIXRpbWVyLT50YXJn
ZXRPcmlnaW4oKS0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlVu
YWJsZSB0byBwb3N0IG1lc3NhZ2UgdG8gJXMuIFJlY2lwaWVudCBoYXMgb3JpZ2luICVzLlxuIiwg
CisgICAgICAgICAgICAgICAgdGltZXItPnRhcmdldE9yaWdpbigpLT50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgICAgICBjb25zb2xlKCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291
cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgMCwgU3RyaW5nKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICBkb2N1bWVudCgpLT5kaXNwYXRjaEV2ZW50KHRpbWVyLT5ldmVudCgpLCBlYywgdHJ1ZSk7CiB9
CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gMzI4MzApCisrKyBXZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEhpc3Rvcnk7CiAgICAgY2xh
c3MgTG9jYXRpb247CisjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKKyAgICBj
bGFzcyBQb3N0TWVzc2FnZVRpbWVyOworI2VuZGlmCiAgICAgY2xhc3MgTmF2aWdhdG9yOwogICAg
IGNsYXNzIFNjcmVlbjsKIApAQCAtMTczLDcgKzE3Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25DYWNoZSgpIGNvbnN0Owog
I2VuZGlmCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKLSAgICAgICAgdm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
T3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWNGb3JTZW5kZXIpIGNv
bnN0OworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2Rl
JiBlYyk7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGlt
ZXIqKTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgc2Nyb2xsQnkoaW50IHgsIGludCB5KSBjb25z
dDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiAzMjgzMCkKKysrIFdlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgbW9kdWxlIHdp
bmRvdyB7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9DUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCiAg
ICAgICAgIC8vIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZwotICAgICAgICBbRG9Ob3RDaGVja0Rv
bWFpblNlY3VyaXR5LCBDdXN0b21dIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3Nh
Z2UsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIHRhcmdldE9yaWdpbikKKyAgICAgICAgW0RvTm90
Q2hlY2tEb21haW5TZWN1cml0eSwgQ3VzdG9tXSB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmlu
ZyBtZXNzYWdlLCBpbiBET01TdHJpbmcgdGFyZ2V0T3JpZ2luKQogICAgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAjZW5kaWYKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzI4OTgpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAw
OC0wNS0wNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aC13ZWJraXRAYWRhbWJhcnRoLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MjUKKyAgICAgICAgVXBkYXRlIHRlc3RzIGZv
ciBhc3luY2hyb25vdXMgcG9zdE1lc3NhZ2UuCisKKyAgICAgICAgQ29sbGluIEphY2tzb24gPGNv
bGxpbmotd2Via2l0QGNvbGxpbmphY2tzb24uY29tPiBhbHNvIGNvbnRyaWJ1dGVkIHRvIHRoaXMg
cGF0Y2guCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL21lc3NhZ2luZy9jcm9zcy1kb21haW4tbWVz
c2FnZS1zZW5kLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9tZXNzYWdpbmcvcmVzb3VyY2Vz
L2Nyb3NzLWRvbWFpbi1tZXNzYWdlLXJlY2VpdmUuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1kZWxldGUuaHRtbDoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1oaXN0b3J5LXB1dC5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLWxvY2F0aW9uLXB1
dC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvZGVsaXZl
cnktb3JkZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dzLWV4Y2Vw
dGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVz
c2FnZS9pbnZhbGlkLW9yaWdpbi10aHJvd3MtZXhjZXB0aW9uLmh0bWw6CisgICAgICAgICogaHR0
cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1iYXNlLXRh
Zy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1iYXNlLXRhZy5odG1sOgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQtYnktZG9jdW1lbnQtZG9t
YWluLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNz
YWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWRvY3VtZW50LWRvbWFpbi5odG1sOgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvcmVzb3VyY2VzL2phdmFzY3JpcHQtcG9z
dC1tZXNzYWdlLXNlbmRlci5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9z
dE1lc3NhZ2UvcmVzb3VyY2VzL3Bvc3QtbWVzc2FnZS1saXN0ZW5lci5odG1sOgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvcmVzb3VyY2VzL3JlY3YuanM6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvdGFyZ2V0LW9yaWdp
bi1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS90YXJnZXQtb3JpZ2luLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNv
dXJjZXMvY3Jvc3MtZnJhbWUtaWZyYW1lLWZvci1kZWxldGUtdGVzdC5odG1sOgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2Nyb3NzLWZyYW1lLWlmcmFtZS1mb3ItaGlz
dG9yeS1wdXQtdGVzdC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3Vy
Y2VzL2Nyb3NzLWZyYW1lLWlmcmFtZS1mb3ItbG9jYXRpb24tcHV0LXRlc3QuaHRtbDoKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94c3MtZXZhbDMuaHRtbDoKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ldmFsLmh0bWw6CisKIDIwMDgtMDUtMDUgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZXNzYWdpbmcvY3Jvc3MtZG9t
YWluLW1lc3NhZ2Utc2VuZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbWVzc2FnaW5nL2Nyb3NzLWRvbWFpbi1tZXNzYWdlLXNlbmQuaHRtbAkocmV2aXNpb24gMzI4
MzApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lc3NhZ2luZy9jcm9zcy1kb21haW4tbWVz
c2FnZS1zZW5kLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEyLDcgKzEyLDcgQEAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogfQogCiBmdW5jdGlvbiBwb3N0SXQgKCkgewotICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWNlaXZlciIpLmNvbnRlbnRXaW5kb3cucG9zdE1l
c3NhZ2UoIlNvbWV0aGluZyIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWNlaXZl
ciIpLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoIlNvbWV0aGluZyIsICIqIik7CiB9CiAKIGZ1
bmN0aW9uIHJlY2VpdmVyKGUpIHsKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVzc2Fn
aW5nL3Jlc291cmNlcy9jcm9zcy1kb21haW4tbWVzc2FnZS1yZWNlaXZlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZXNzYWdpbmcvcmVzb3VyY2VzL2Nyb3NzLWRv
bWFpbi1tZXNzYWdlLXJlY2VpdmUuaHRtbAkocmV2aXNpb24gMzI4MzApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL21lc3NhZ2luZy9yZXNvdXJjZXMvY3Jvc3MtZG9tYWluLW1lc3NhZ2UtcmVj
ZWl2ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsxMCw3IEBAIGZ1bmN0aW9uIHJlY2Vp
dmVyKGUpIHsKICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgcmVzdWx0ICs9ICJkYXRhOiAiICsg
ZS5kYXRhICsgIlxuIjsKICAgICByZXN1bHQgKz0gIm9yaWdpbjogIiArIGUub3JpZ2luICsgIlxu
IjsKLSAgICBlLnNvdXJjZS5wb3N0TWVzc2FnZShyZXN1bHQpOyAgIAorICAgIGUuc291cmNlLnBv
c3RNZXNzYWdlKHJlc3VsdCwgIioiKTsgICAKIH0KIAogZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cignbWVzc2FnZScsIHJlY2VpdmVyLCBmYWxzZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1kZWxldGUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1kZWxl
dGUuaHRtbAkocmV2aXNpb24gMzI4MzApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1kZWxldGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogICAgICAgICAgICAgc2hvdWxkQmUoImV2YWwoJ2RlbGV0ZSB0YXJnZXRXaW5k
b3cubG9jYXRpb24uZXhpc3RpbmdQcm9wZXJ0eScpIiwgImZhbHNlIik7CiAgICAgICAgICAgICBz
aG91bGRCZSgiZXZhbCgnZGVsZXRlIHRhcmdldFdpbmRvdy5sb2NhdGlvblsxXScpIiwgImZhbHNl
Iik7CiAKLSAgICAgICAgICAgIHRhcmdldFdpbmRvdy5wb3N0TWVzc2FnZSgiZGVsZXRpbmdWYWx1
ZXNDb21wbGV0ZSIpOworICAgICAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdlKCJkZWxl
dGluZ1ZhbHVlc0NvbXBsZXRlIiwgIioiKTsKICAgICAgICAgfQogICAgIDwvc2NyaXB0PgogPC9o
ZWFkPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1h
Y2Nlc3MtaGlzdG9yeS1wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1oaXN0b3J5LXB1dC5odG1sCShyZXZpc2lv
biAzMjgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUt
YWNjZXNzLWhpc3RvcnktcHV0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAK
ICAgICAgICAgICAgIHRyeSB7IHRhcmdldFdpbmRvdy5oaXN0b3J5LmN1c3RvbUF0dHJpYnV0ZSA9
ICJGQUlMISEgQ1VTVE9NIGN1c3RvbUF0dHJpYnV0ZSI7IH0gY2F0Y2goZSkgeyBsb2coZSk7IH0K
IAogICAgICAgICAgICAgaWYgKHdpbmRvdy5wb3N0TWVzc2FnZSkKLSAgICAgICAgICAgICAgICB0
YXJnZXRXaW5kb3cucG9zdE1lc3NhZ2UoInNldHRpbmdWYWx1ZXNDb21wbGV0ZSIpOworICAgICAg
ICAgICAgICAgIHRhcmdldFdpbmRvdy5wb3N0TWVzc2FnZSgic2V0dGluZ1ZhbHVlc0NvbXBsZXRl
IiwgIioiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsb2coIlxuU2V0IFRl
c3QgY29tcGxldGUhICBDbGljayBidXR0b24gZW50aXRsZWQgJ1N0ZXAgMiAtIFNldCBDaGVjaycg
dG8gZmluaXNoIHRoZSB0ZXN0LiIpOwogICAgICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1sb2NhdGlvbi1wdXQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFj
Y2Vzcy1sb2NhdGlvbi1wdXQuaHRtbAkocmV2aXNpb24gMzI4MzApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1sb2NhdGlvbi1wdXQuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgdHJ5IHsgdGFyZ2V0
V2luZG93LmxvY2F0aW9uLmN1c3RvbUF0dHJpYnV0ZSA9ICJGQUlMISEgQ1VTVE9NIGN1c3RvbUF0
dHJpYnV0ZSI7IH0gY2F0Y2goZSkgeyBsb2coZSk7IH0KIAogICAgICAgICAgICAgaWYgKHdpbmRv
dy5wb3N0TWVzc2FnZSkKLSAgICAgICAgICAgICAgICB0YXJnZXRXaW5kb3cucG9zdE1lc3NhZ2Uo
InNldHRpbmdWYWx1ZXNDb21wbGV0ZSIpOworICAgICAgICAgICAgICAgIHRhcmdldFdpbmRvdy5w
b3N0TWVzc2FnZSgic2V0dGluZ1ZhbHVlc0NvbXBsZXRlIiwgIioiKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBsb2coIlxuU2V0IFRlc3QgY29tcGxldGUhICBDbGljayBidXR0
b24gZW50aXRsZWQgJ1N0ZXAgMiAtIFNldCBDaGVjaycgdG8gZmluaXNoIHRoZSB0ZXN0LiIpOwog
ICAgICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ldmFs
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3Mt
ZXZhbC5odG1sCShyZXZpc2lvbiAzMjgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzLWV2YWwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQCBmdW5j
dGlvbiBzaG91bGRCZShhRGVzY3JpcHRpb24sIGEsIGIpCiAgICAgfQogfQogCi1hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24oKQorZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
bWVzc2FnZSIsIGZ1bmN0aW9uKCkKIHsKICAgICBzaG91bGRCZSgiZXZhbC5jYWxsKGZyYW1lc1sw
XSwgJ2RvY3VtZW50JykiLCAoZnVuY3Rpb24oKSB7IHRyeSB7IHJldHVybiBldmFsLmNhbGwoZnJh
bWVzWzBdLCAnZG9jdW1lbnQnKTsgfSBjYXRjaChlKSB7IHJldHVybiBlLm5hbWU7IH0gfSkoKSwg
IkV2YWxFcnJvciIpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bv
c3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvcG9zdE1lc3NhZ2UvZGVsaXZlcnktb3JkZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDcgQEAKK3dpbmRvdy5sb2NhdGlvbi5ocmVmID0gaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLmh0bWwKKword2FpdGluZy4u
LgorQmVmb3JlIGNhbGxpbmcgcG9zdE1lc3NhZ2UKK0FmdGVyIGNhbGxpbmcgcG9zdE1lc3NhZ2UK
K1JlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9Ik1lc3NhZ2Ug
ZnJvbSBwYXJlbnQiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJodHRw
Oi8vbG9jYWxob3N0OjgwMDAiCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNz
YWdlOiBkYXRhPSJkb25lIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0i
aHR0cDovL2xvY2FsaG9zdDo4MDAwIgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9wb3N0TWVzc2FnZS9kZWxpdmVyeS1vcmRlci5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvZGVsaXZlcnktb3JkZXIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1l
c3NhZ2UvZGVsaXZlcnktb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9y
ZWN2LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcignbWVzc2FnZScsIHJlY3YsIGZhbHNlKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAg
ICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7CisgICAgdmFy
IHdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93OworCisgICAgbG9nKCdCZWZvcmUgY2FsbGluZyBw
b3N0TWVzc2FnZScpOworICAgIHdpbi5wb3N0TWVzc2FnZSgnTWVzc2FnZSBmcm9tIHBhcmVudCcs
ICcqJyk7CisgICAgbG9nKCdBZnRlciBjYWxsaW5nIHBvc3RNZXNzYWdlJyk7CisKKyAgICB3aW4u
cG9zdE1lc3NhZ2UoJ2RvbmUnLCAnKicpOworfQorPC9zY3JpcHQ+Cis8YmFzZSBocmVmPSJodHRw
Oi8vd3d3LmV4YW1wbGUuY29tLyI+Cis8Ym9keT4KKzxkaXY+d2luZG93LmxvY2F0aW9uLmhyZWYg
PSA8c2NyaXB0PmRvY3VtZW50LndyaXRlKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpOzwvc2NyaXB0
PjwvZGl2PgorPGRpdj48aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5
L3Bvc3RNZXNzYWdlL3Jlc291cmNlcy9wb3N0LW1lc3NhZ2UtbGlzdGVuZXIuaHRtbCIgb25sb2Fk
PSJ0ZXN0KCkiCisgIGlkPSJjaGlsZCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSIzMDAiIHN0eWxlPSJi
b3JkZXI6IDFweCBzb2xpZCBibGFjazsiPgorPC9pZnJhbWU+PC9kaXY+Cis8ZGl2IGlkPSJyZXN1
bHQiPndhaXRpbmcuLi48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9pbnZhbGlkLW9yaWdpbi10aHJvd3Mt
ZXhjZXB0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2ludmFsaWQtb3JpZ2luLXRocm93cy1leGNlcHRpb24t
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzMjgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvcG9zdE1lc3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dzLWV4Y2VwdGlvbi1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKLUNPTlNPTEUgTUVTU0FH
RTogbGluZSAwOiBVbmFibGUgdG8gcG9zdCBtZXNzYWdlIHRvIGFzZGY6LiBSZWNpcGllbnQgaGFz
IG9yaWdpbiBodHRwOi8vbG9jYWxob3N0OjgwMDAuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDog
VW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byBhc2RmOi8vLiBSZWNpcGllbnQgaGFzIG9yaWdpbiBo
dHRwOi8vbG9jYWxob3N0OjgwMDAuCiAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBVbmFibGUg
dG8gcG9zdCBtZXNzYWdlIHRvIGh0dHA6LiBSZWNpcGllbnQgaGFzIG9yaWdpbiBodHRwOi8vbG9j
YWxob3N0OjgwMDAuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogVW5hYmxlIHRvIHBvc3QgbWVz
c2FnZSB0byBodHRwOi8vLiBSZWNpcGllbnQgaGFzIG9yaWdpbiBodHRwOi8vbG9jYWxob3N0Ojgw
MDAuCiAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBVbmFibGUgdG8gcG9zdCBtZXNzYWdlIHRv
IC90bXAvZm9vLiBSZWNpcGllbnQgaGFzIG9yaWdpbiBodHRwOi8vbG9jYWxob3N0OjgwMDAuCitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMDogVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byBsb2NhbGhv
c3Q6ODAwMC4KIAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFVuYWJsZSB0byBwb3N0IG1lc3Nh
Z2UgdG8gLy9sb2NhbGhvc3QuIFJlY2lwaWVudCBoYXMgb3JpZ2luIGh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBVbmFibGUgdG8gcG9zdCBtZXNzYWdlIHRv
IGxvY2FsaG9zdDo4MDAwLgogCiB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9zZWN1cml0eS9wb3N0TWVzc2FnZS9pbnZhbGlkLW9yaWdpbi10aHJvd3MtZXhjZXB0
aW9uLmh0bWwKIApAQCAtMTUsMyArMTUsNCBAQCBQb3N0ZWQgbWVzc2FnZSB0byAnYXNkZjonIHdp
dGhvdXQgYW55IGV4CiBQb3N0ZWQgbWVzc2FnZSB0byAnaHR0cDonIHdpdGhvdXQgYW55IGV4Y2Vw
dGlvbnMuCiBQb3N0ZWQgbWVzc2FnZSB0byAnL3RtcC9mb28nIHdpdGhvdXQgYW55IGV4Y2VwdGlv
bnMuCiBQb3N0ZWQgbWVzc2FnZSB0byAnLy9sb2NhbGhvc3QnIHdpdGhvdXQgYW55IGV4Y2VwdGlv
bnMuCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJkb25l
IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9z
dDo4MDAwIgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS9pbnZhbGlkLW9yaWdpbi10aHJvd3MtZXhjZXB0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9pbnZhbGlkLW9yaWdpbi10
aHJvd3MtZXhjZXB0aW9uLmh0bWwJKHJldmlzaW9uIDMyODMwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9pbnZhbGlkLW9yaWdpbi10aHJvd3MtZXhjZXB0
aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAgKzEsMTIgQEAKLTxzY3JpcHQ+Ci1pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7Ci08L3NjcmlwdD4KLQogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWN2LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
IH0KLQotZnVuY3Rpb24gcmVjdihlKSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJl
c3VsdCIpLmlubmVySFRNTCArPSAiPGJyPiIgKyBlLmRhdGE7Ci19CiAgCiBkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjdiwgZmFsc2UpOwogCkBAIC00Myw4ICszNSw4IEBA
IGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgdHJ5UG9zdE1lc3NhZ2UoIi90bXAvZm9vIik7CiAgICAg
dHJ5UG9zdE1lc3NhZ2UoIi8vbG9jYWxob3N0Iik7CiAKLSAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgCisgICAgd2luLnBvc3RNZXNzYWdlKCdkb25lJywgJyonKTsKIH0KIDwvc2NyaXB0Pgog
PGJvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdl
L29yaWdpbi11bmFmZmVjdGVkLWJ5LWJhc2UtdGFnLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL29yaWdpbi11bmFm
ZmVjdGVkLWJ5LWJhc2UtdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMzI4MzApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL29yaWdpbi11bmFmZmVjdGVk
LWJ5LWJhc2UtdGFnLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUgQEAK
IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaHR0cDovLzEyNy4wLjAuMTo4MDAwL3NlY3VyaXR5L3Bv
c3RNZXNzYWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWJhc2UtdGFnLmh0bWwKIAotUmVjZWl2ZWQg
bWVzc2FnZTogZGF0YT0iTWVzc2FnZSBmcm9tIHBhcmVudCIgb3JpZ2luPSJodHRwOi8vMTI3LjAu
MC4xOjgwMDAiCit3YWl0aW5nLi4uCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBt
ZXNzYWdlOiBkYXRhPSJNZXNzYWdlIGZyb20gcGFyZW50IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4w
LjE6ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgorUmVjZWl2ZWQgbWVzc2Fn
ZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iZG9uZSIgb3JpZ2luPSJodHRwOi8vMTI3
LjAuMC4xOjgwMDAiIiBvcmlnaW49Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQt
YnktYmFzZS10YWcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3Bvc3RNZXNzYWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWJhc2UtdGFnLmh0bWwJKHJl
dmlzaW9uIDMyODMwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVz
c2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1iYXNlLXRhZy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDI1ICsxLDIxIEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3JlY3YuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogfQogCi1m
dW5jdGlvbiByZWN2KGUpIHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iiku
Zmlyc3RDaGlsZC5kYXRhID0gZS5kYXRhOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQot
CiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjdiwgZmFsc2UpOwogCiBm
dW5jdGlvbiB0ZXN0KCkgewogICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY2hpbGQnKTsKICAgICB2YXIgd2luID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7Ci0gICAgd2lu
LnBvc3RNZXNzYWdlKCdNZXNzYWdlIGZyb20gcGFyZW50Jyk7CisgICAgd2luLnBvc3RNZXNzYWdl
KCdNZXNzYWdlIGZyb20gcGFyZW50JywgJyonKTsKKworICAgIHdpbi5wb3N0TWVzc2FnZSgnZG9u
ZScsICcqJyk7CiB9CiA8L3NjcmlwdD4KIDxiYXNlIGhyZWY9Imh0dHA6Ly93d3cuZXhhbXBsZS5j
b20vIj4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uv
b3JpZ2luLXVuYWZmZWN0ZWQtYnktZG9jdW1lbnQtZG9tYWluLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL29yaWdp
bi11bmFmZmVjdGVkLWJ5LWRvY3VtZW50LWRvbWFpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDMy
ODMwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmln
aW4tdW5hZmZlY3RlZC1ieS1kb2N1bWVudC1kb21haW4tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNiBAQAogd2luZG93LmxvY2F0aW9uLmhyZWYgPSBodHRwOi8vMTI3LjAu
MC4xOjgwMDAvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQtYnktZG9jdW1l
bnQtZG9tYWluLmh0bWwKIGRvY3VtZW50LmRvbWFpbiA9IDAuMC4xCiAKLVJlY2VpdmVkIG1lc3Nh
Z2U6IGRhdGE9Ik1lc3NhZ2UgZnJvbSBwYXJlbnQiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4
MDAwIgord2FpdGluZy4uLgorUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2Fn
ZTogZGF0YT0iTWVzc2FnZSBmcm9tIHBhcmVudCIgb3JpZ2luPSJodHRwOi8vMTI3LjAuMC4xOjgw
MDAiIiBvcmlnaW49Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIKK1JlY2VpdmVkIG1lc3NhZ2U6IGRh
dGE9IlJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9ImRvbmUiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAu
MTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9jYWxob3N0OjgwMDAiCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWRv
Y3VtZW50LWRvbWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQtYnktZG9jdW1lbnQtZG9tYWlu
Lmh0bWwJKHJldmlzaW9uIDMyODMwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1kb2N1bWVudC1kb21haW4uaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSwyNSArMSwyMSBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4K
IDxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWN2LmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQ+CiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKIH0KIAotZnVuY3Rpb24gcmVjdihlKSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInJlc3VsdCIpLmZpcnN0Q2hpbGQuZGF0YSA9IGUuZGF0YTsKLQotICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKLX0KLQogZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJl
Y3YsIGZhbHNlKTsKIAogZnVuY3Rpb24gdGVzdCgpIHsKICAgICB2YXIgaWZyYW1lID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7CiAgICAgdmFyIHdpbiA9IGlmcmFtZS5jb250ZW50
V2luZG93OwotICAgIHdpbi5wb3N0TWVzc2FnZSgnTWVzc2FnZSBmcm9tIHBhcmVudCcpOworICAg
IHdpbi5wb3N0TWVzc2FnZSgnTWVzc2FnZSBmcm9tIHBhcmVudCcsICcqJyk7CisKKyAgICB3aW4u
cG9zdE1lc3NhZ2UoJ2RvbmUnLCAnKicpOwogfQogCiBkb2N1bWVudC5kb21haW4gPSAiMC4wLjEi
OwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS90YXJn
ZXQtb3JpZ2luLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3RhcmdldC1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAzMjgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3Nh
Z2UvdGFyZ2V0LW9yaWdpbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExLDExICsx
MSwxMyBAQCBDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogVW5hYmxlIHRvIHBvc3QgCiB3aW5kb3cu
bG9jYXRpb24uaHJlZiA9IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS90YXJnZXQtb3JpZ2luLmh0bWwKIAogd2FpdGluZy4uLgotUmVjZWl2ZWQgbWVzc2FnZTogZGF0
YT0iVHJ5aW5nIG9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAiIG9yaWdpbj0iaHR0cDovLzEy
Ny4wLjAuMTo4MDAwIgotUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1odHRw
Oi8vbG9jYWxob3N0OjgwMDAvIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIKLVJlY2Vp
dmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwL2Zv
byIgb3JpZ2luPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAiCi1SZWNlaXZlZCBtZXNzYWdlOiBkYXRh
PSJUcnlpbmcgb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9mb28/YmFyIiBvcmlnaW49Imh0
dHA6Ly8xMjcuMC4wLjE6ODAwMCIKLVJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmln
aW49aHR0cDovL2xvY2FsaG9zdDo4MDAwL2Zvbz9iYXIjYmF6IiBvcmlnaW49Imh0dHA6Ly8xMjcu
MC4wLjE6ODAwMCIKLVJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmlnaW49aHR0cDov
L3VzZXI6cGFzc0Bsb2NhbGhvc3Q6ODAwMC9mb28/YmFyI2JheiIgb3JpZ2luPSJodHRwOi8vMTI3
LjAuMC4xOjgwMDAiCi1SZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3JpZ2luPW51bGwi
IG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIgotUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0i
VHJ5aW5nIG9yaWdpbj11bmRlZmluZWQiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIgor
RXJyb3Igc2VuZGluZyBtZXNzYWdlIHRvIG51bGwuIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyCitFcnJvciBzZW5kaW5nIG1lc3NhZ2UgdG8gdW5kZWZpbmVkLiBFcnJvcjogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgorUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2
ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAiIG9y
aWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9jYWxob3N0Ojgw
MDAiCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlp
bmcgb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8iIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAu
MTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9jYWxob3N0OjgwMDAiCitSZWNlaXZlZCBtZXNzYWdl
OiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3JpZ2luPWh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9mb28iIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJo
dHRwOi8vbG9jYWxob3N0OjgwMDAiCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBt
ZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9mb28/YmFy
IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9z
dDo4MDAwIgorUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0i
VHJ5aW5nIG9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAvZm9vP2JhciNiYXoiIG9yaWdpbj0i
aHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9jYWxob3N0OjgwMDAiCitS
ZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3Jp
Z2luPWh0dHA6Ly91c2VyOnBhc3NAbG9jYWxob3N0OjgwMDAvZm9vP2JhciNiYXoiIG9yaWdpbj0i
aHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9jYWxob3N0OjgwMDAiCitS
ZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3Jp
Z2luPSoiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAiCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBk
YXRhPSJkb25lIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwIgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9w
b3N0TWVzc2FnZS90YXJnZXQtb3JpZ2luLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS90YXJnZXQtb3JpZ2luLmh0bWwJKHJldmlz
aW9uIDMyODMwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS90YXJnZXQtb3JpZ2luLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAgKzEsMjEgQEAKIDwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVj
di5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiB9CiAKLWZ1bmN0aW9uIHJlY3YoZSkgewot
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gIjxicj4i
ICsgZS5kYXRhOwotfQotIAogZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJl
Y3YsIGZhbHNlKTsKIAogZnVuY3Rpb24gdHJ5UG9zdE1lc3NhZ2Uod2luLCBvcmlnaW4pIHsKLSAg
ICB3aW4ucG9zdE1lc3NhZ2UoIlRyeWluZyBvcmlnaW49IiArIG9yaWdpbiwgb3JpZ2luKTsKKyAg
ICB0cnkgeworICAgICAgICB3aW4ucG9zdE1lc3NhZ2UoIlRyeWluZyBvcmlnaW49IiArIG9yaWdp
biwgb3JpZ2luKTsKKyAgICB9IGNhdGNoKGV4KSB7CisgICAgICAgIGxvZygiRXJyb3Igc2VuZGlu
ZyBtZXNzYWdlIHRvICIgKyBvcmlnaW4gKyAiLiAiICsgZXgpOworICAgIH0KIH0KIAogZnVuY3Rp
b24gdGVzdCgpIHsKQEAgLTI4LDggKzI5LDcgQEAgZnVuY3Rpb24gdGVzdCgpIHsKICAgICB0cnlQ
b3N0TWVzc2FnZSh3aW4sICJodHRwOi8vbG9jYWxob3N0OjgwMDAvZm9vP2JhciIpOwogICAgIHRy
eVBvc3RNZXNzYWdlKHdpbiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9mb28/YmFyI2JheiIpOwog
ICAgIHRyeVBvc3RNZXNzYWdlKHdpbiwgImh0dHA6Ly91c2VyOnBhc3NAbG9jYWxob3N0OjgwMDAv
Zm9vP2JhciNiYXoiKTsKLSAgICB0cnlQb3N0TWVzc2FnZSh3aW4sIG51bGwpOwotICAgIHRyeVBv
c3RNZXNzYWdlKHdpbiwgdW5kZWZpbmVkKTsKKyAgICB0cnlQb3N0TWVzc2FnZSh3aW4sICIqIik7
CiAKICAgICAvLyBTaG91bGQgZmFpbDoKICAgICB0cnlQb3N0TWVzc2FnZSh3aW4sICJodHRwOi8v
bG9jYWxob3N0OjkwOTAiKTsKQEAgLTM4LDggKzM4LDExIEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAg
ICAgdHJ5UG9zdE1lc3NhZ2Uod2luLCAiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMCIpOwogICAgIHRy
eVBvc3RNZXNzYWdlKHdpbiwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKIAotICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICAvLyBTaG91bGQgdGhyb3cgc3ludGF4IGVycm9yOgorICAgIHRy
eVBvc3RNZXNzYWdlKHdpbiwgbnVsbCk7CisgICAgdHJ5UG9zdE1lc3NhZ2Uod2luLCB1bmRlZmlu
ZWQpOworCisgICAgd2luLnBvc3RNZXNzYWdlKCdkb25lJywgJyonKTsKIH0KIDwvc2NyaXB0Pgog
PGJvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdl
L3Jlc291cmNlcy9qYXZhc2NyaXB0LXBvc3QtbWVzc2FnZS1zZW5kZXIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3Jlc291cmNl
cy9qYXZhc2NyaXB0LXBvc3QtbWVzc2FnZS1zZW5kZXIuaHRtbAkocmV2aXNpb24gMzI4MzApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3Jlc291cmNlcy9q
YXZhc2NyaXB0LXBvc3QtbWVzc2FnZS1zZW5kZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNCw3
ICs0LDcgQEAKIDxzY3JpcHQ+CiBmdW5jdGlvbiBuYXYoKSB7CiAgICAgdmFyIHVybCA9ICJqYXZh
c2NyaXB0Oic8c2NyaXB0PiIgKyAKLSAgICAgICJ0b3AucG9zdE1lc3NhZ2UoXCJIZWxsbyBmcm9t
IGNoaWxkXCIpOyIgKyAKKyAgICAgICJ0b3AucG9zdE1lc3NhZ2UoXCJIZWxsbyBmcm9tIGNoaWxk
XCIsIFwiKlwiKTsiICsgCiAgICAgICAiZG9jdW1lbnQud3JpdGUoXCJNZXNzYWdlIHNlbnRcIik7
IiArCiAgICAgICAiPC9zY3JpIiArICJwdD4nIjsKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNvdXJjZXMvcG9zdC1tZXNzYWdlLWxpc3RlbmVy
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0
TWVzc2FnZS9yZXNvdXJjZXMvcG9zdC1tZXNzYWdlLWxpc3RlbmVyLmh0bWwJKHJldmlzaW9uIDMy
ODMwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNv
dXJjZXMvcG9zdC1tZXNzYWdlLWxpc3RlbmVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUsNyAr
NSw3IEBACiA8c2NyaXB0PgogZnVuY3Rpb24gcmVjdihlKSB7CiAgICAgdmFyIG1zZyA9ICdSZWNl
aXZlZCBtZXNzYWdlOiBkYXRhPSInICsgZS5kYXRhICsgJyIgb3JpZ2luPSInICsgZS5vcmlnaW4g
KyAnIic7Ci0gICAgdG9wLnBvc3RNZXNzYWdlKG1zZyk7CisgICAgdG9wLnBvc3RNZXNzYWdlKG1z
ZywgJyonKTsKIH0KIAogZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY3Ys
IGZhbHNlKTsKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3Nh
Z2UvcmVzb3VyY2VzL3JlY3YuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNvdXJjZXMvcmVjdi5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvcmVzb3VyY2VzL3Jl
Y3YuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uIGxvZyhtc2cpIHsK
KyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZGl2LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOworICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5hcHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiBy
ZWN2KGUpIHsKKyAgICB2YXIgbXNnID0gJ1JlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IicgKyBlLmRh
dGEgKyAnIiBvcmlnaW49IicgKyBlLm9yaWdpbiArICciJzsKKworICAgIGxvZyhtc2cpOworCisg
ICAgaWYgKGUuZGF0YS5tYXRjaCgvZGF0YT0iZG9uZSIvKSAmJiB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3Jvc3Mt
ZnJhbWUtaWZyYW1lLWZvci1kZWxldGUtdGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2Nyb3NzLWZyYW1lLWlmcmFtZS1mb3It
ZGVsZXRlLXRlc3QuaHRtbAkocmV2aXNpb24gMzI4MzApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9yLWRlbGV0ZS10ZXN0
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgICAgICAgIHdpbmRv
dy5sb2NhdGlvbi5leGlzdGluZ1Byb3BlcnR5ID0gInRlc3QgdmFsdWUiOwogICAgICAgICAgICAg
d2luZG93LmxvY2F0aW9uWzFdID0gInRlc3QgdmFsdWUiOwogCi0gICAgICAgICAgICB3aW5kb3cu
cGFyZW50LnBvc3RNZXNzYWdlKCJzZXRWYWx1ZXNDb21wbGV0ZSIpOworICAgICAgICAgICAgd2lu
ZG93LnBhcmVudC5wb3N0TWVzc2FnZSgic2V0VmFsdWVzQ29tcGxldGUiLCAiKiIpOwogICAgICAg
ICB9CiAKICAgICAgICAgc2V0Q2hlY2sgPSBmdW5jdGlvbigpCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9yLWhpc3Rv
cnktcHV0LXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9yLWhpc3RvcnktcHV0LXRlc3Qu
aHRtbAkocmV2aXNpb24gMzI4MzApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9yLWhpc3RvcnktcHV0LXRlc3QuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgY3VzdG9tQXR0cmli
dXRlT2xkID0gd2luZG93Lmhpc3RvcnkuY3VzdG9tQXR0cmlidXRlOwogCiAgICAgICAgICAgICBp
ZiAod2luZG93LnBvc3RNZXNzYWdlKQotICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9z
dE1lc3NhZ2UoInN0b3JlZE9sZFZhbHVlc0NvbXBsZXRlIik7CisgICAgICAgICAgICAgICAgd2lu
ZG93LnBhcmVudC5wb3N0TWVzc2FnZSgic3RvcmVkT2xkVmFsdWVzQ29tcGxldGUiLCAiKiIpOwog
ICAgICAgICB9CiAKICAgICAgICAgc2V0Q2hlY2sgPSBmdW5jdGlvbigpCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9y
LWxvY2F0aW9uLXB1dC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3Jvc3MtZnJhbWUtaWZyYW1lLWZvci1sb2NhdGlvbi1w
dXQtdGVzdC5odG1sCShyZXZpc2lvbiAzMjgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvcmVzb3VyY2VzL2Nyb3NzLWZyYW1lLWlmcmFtZS1mb3ItbG9jYXRpb24tcHV0LXRl
c3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICAgICAgY3Vz
dG9tQXR0cmlidXRlT2xkID0gd2luZG93LmxvY2F0aW9uLmN1c3RvbUF0dHJpYnV0ZTsKIAogICAg
ICAgICAgICAgaWYgKHdpbmRvdy5wb3N0TWVzc2FnZSkKLSAgICAgICAgICAgICAgICB3aW5kb3cu
cGFyZW50LnBvc3RNZXNzYWdlKCJzdG9yZWRPbGRWYWx1ZXNDb21wbGV0ZSIpOworICAgICAgICAg
ICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoInN0b3JlZE9sZFZhbHVlc0NvbXBsZXRl
IiwgIioiKTsKICAgICAgICAgfQogCiAgICAgICAgIHNldENoZWNrID0gZnVuY3Rpb24oKQpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveHNzLWV2YWwzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJj
ZXMveHNzLWV2YWwzLmh0bWwJKHJldmlzaW9uIDMyODMwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveHNzLWV2YWwzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwzIEBACiA8c2NyaXB0PgotcGFyZW50LnBvc3RNZXNzYWdlKCJkb25lIik7CitwYXJl
bnQucG9zdE1lc3NhZ2UoImRvbmUiLCAiKiIpOwogPC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="9177"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20989</attachid>
            <date>2008-05-06 14:21:01 -0700</date>
            <delta_ts>2008-05-06 14:21:01 -0700</delta_ts>
            <desc>Updated patch to address Sam&apos;s comments</desc>
            <filename>async4.patch</filename>
            <type>text/plain</type>
            <size>31253</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDgtMDUtMDYgIEFkYW0gQmFydGggIDxhYmFydGgtd2Via2l0QGFk
YW1iYXJ0aC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MjUKKyAgICAgICAg
SW1wbGVtZW50IGFzeW5jaHJvbm91cyBwb3N0TWVzc2FnZS4KKyAgICAgICAgTWVzc2FnZUV2ZW50
IG5vIGxvbmdlciBidWJibGVzIGFzIHBlciByMTIzNyBpbiB0aGUgSFRNTCA1IHdvcmtpbmcgZHJh
ZnQuCisKKyAgICAgICAgQ29sbGluIEphY2tzb24gPGNvbGxpbmotd2Via2l0QGNvbGxpbmphY2tz
b24uY29tPiBhbHNvIGNvbnRyaWJ1dGVkIHRvIHRoaXMgcGF0Y2guCisKKyAgICAgICAgVGVzdDog
aHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9kZWxpdmVyeS1vcmRlci5odG1sCisKKyAg
ICAgICAgKiBkb20vTWVzc2FnZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VF
dmVudDo6TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQb3N0TWVzc2FnZVRpbWVyOjpQb3N0TWVzc2FnZVRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc3RNZXNzYWdlVGltZXI6OmV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBvc3RNZXNzYWdlVGltZXI6OnRhcmdldE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQb3N0
TWVzc2FnZVRpbWVyOjpmaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnBvc3RN
ZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZp
cmVkKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBhZ2UvRE9NV2lu
ZG93LmlkbDoKKyAgICAgICAgCiAyMDA4LTA1LTA2ICBLZXZpbiBNY0N1bGxvdWdoICA8a21jY3Vs
bG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIC0gRm9yZ290IHRvIHVwZGF0ZSBsb2NhbGl6ZWQg
U3RyaW5ncyBmcm9tIHByZXZpb3VzIGNoZWNraW4uCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJl
dmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudCgpCiB9CiAK
IE1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIERPTVdpbmRvdyogc291cmNlKQotICAgIDogRXZlbnQobWVzc2FnZUV2ZW50
LCB0cnVlLCB0cnVlKQorICAgIDogRXZlbnQobWVzc2FnZUV2ZW50LCBmYWxzZSwgdHJ1ZSkKICAg
ICAsIG1fZGF0YShkYXRhKQogICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICwgbV9zb3VyY2Uo
c291cmNlKQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDMxIEBAIHVzaW5n
IHN0ZDo6bWF4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQ1JPU1NfRE9D
VU1FTlRfTUVTU0FHSU5HKQorY2xhc3MgUG9zdE1lc3NhZ2VUaW1lciA6IHB1YmxpYyBUaW1lckJh
c2UgeworcHVibGljOgorICAgIFBvc3RNZXNzYWdlVGltZXIoRE9NV2luZG93KiB3aW5kb3csIE1l
c3NhZ2VFdmVudCogZXZlbnQsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCisgICAgICAg
IDogbV93aW5kb3cod2luZG93KQorICAgICAgICAsIG1fZXZlbnQoZXZlbnQpCisgICAgICAgICwg
bV90YXJnZXRPcmlnaW4odGFyZ2V0T3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBNZXNzYWdl
RXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsgfQorICAgIFNlY3Vy
aXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldE9yaWdpbi5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIAorICAgIHsKKyAg
ICAgICAgbV93aW5kb3ctPnBvc3RNZXNzYWdlVGltZXJGaXJlZCh0aGlzKTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8RE9NV2luZG93PiBtX3dpbmRvdzsKKyAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBt
X2V2ZW50OworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV90YXJnZXRPcmlnaW47Cit9Owor
I2VuZGlmCisKIC8vIFRoaXMgZnVuY3Rpb246CiAvLyAxKSBWYWxpZGF0ZXMgdGhlIHBlbmRpbmcg
Y2hhbmdlcyBhcmUgbm90IGNoYW5naW5nIHRvIE5hTgogLy8gMikgQ29uc3RyYWlucyB0aGUgd2lu
ZG93IHJlY3QgdG8gbm8gc21hbGxlciB0aGFuIDEwMCBpbiBlYWNoIGRpbWVuc2lvbiBhbmQgbm8K
QEAgLTMyNSwzOSArMzUwLDUzIEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkg
Y29uc3QKICNlbmRpZgogCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKLXZv
aWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0T3JpZ2luLCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWNG
b3JTZW5kZXIpIGNvbnN0Cit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCF0YXJnZXRPcmlnaW4uaXNOdWxsKCkpIHsKLSAgICAgICAgS1VSTCBkZXNp
cmVkVGFyZ2V0VVJMKHRhcmdldE9yaWdpbik7Ci0gICAgICAgIGlmICghZGVzaXJlZFRhcmdldFVS
TC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGVjRm9yU2VuZGVyID0gU1lOVEFYX0VSUjsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gZGVzaXJlZFRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoZGVzaXJl
ZFRhcmdldFVSTCk7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBhY3R1YWxUYXJnZXRPcmlnaW4g
PSBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgICAgICBpZiAoZGVzaXJlZFRhcmdl
dE9yaWdpbi0+aXNFbXB0eSgpIHx8ICFkZXNpcmVkVGFyZ2V0T3JpZ2luLT5pc1NhbWVTY2hlbWVI
b3N0UG9ydChhY3R1YWxUYXJnZXRPcmlnaW4pKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc2VuZGVy
IGlzIG5vdCBhbGxvd2VkIHRvIGZpbmQgb3V0IHRoZSBvcmlnaW4gb2YKLSAgICAgICAgICAgIC8v
IHRoZSByZWNpcGllbnQsIHNvIHdlIGZhaWwgc2lsZW50bHkgYW5kIGxvZyBhIG1lc3NhZ2UKLSAg
ICAgICAgICAgIC8vIHRvIHRoZSBjb25zb2xlLgotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byAlcy4gUmVjaXBpZW50
IGhhcyBvcmlnaW4gJXMuXG4iLCAKLSAgICAgICAgICAgICAgICB0YXJnZXRPcmlnaW4udXRmOCgp
LmRhdGEoKSwgYWN0dWFsVGFyZ2V0T3JpZ2luLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgY29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JN
ZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAsIFN0cmluZygpKTsKKyAgICAvLyBDb21wdXRlIHRoZSB0
YXJnZXQgb3JpZ2luLiAgV2UgbmVlZCB0byBkbyB0aGlzIHN5bmNocm9ub3VzbHkgaW4gb3JkZXIK
KyAgICAvLyB0byBnZW5lcmF0ZSB0aGUgU1lOVEFYX0VSUiBleGNlcHRpb24gY29ycmVjdGx5Lgor
ICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gdGFyZ2V0OworICAgIGlmICh0YXJnZXRPcmlnaW4g
IT0gIioiKSB7CisgICAgICAgIHRhcmdldCA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTCh0
YXJnZXRPcmlnaW4pKTsKKyAgICAgICAgaWYgKHRhcmdldC0+aXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICAvLyBDYXB0dXJlIHRoZSBzb3VyY2Ugb2YgdGhlIG1lc3NhZ2UuICBXZSBuZWVk
IHRvIGRvIHRoaXMgc3luY2hyb25vdXNseQorICAgIC8vIGluIG9yZGVyIHRvIGNhcHR1cmUgdGhl
IHNvdXJjZSBvZiB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCiAgICAgRG9jdW1lbnQqIHNvdXJjZURv
Y3VtZW50ID0gc291cmNlLT5kb2N1bWVudCgpOwogICAgIGlmICghc291cmNlRG9jdW1lbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICBTdHJpbmcgc291cmNlT3JpZ2luID0gc291cmNlRG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7CiAKLSAgICAvLyBTZW5kZXIgaXMgbm90IGFs
bG93ZWQgdG8gc2VlIGV4Y2VwdGlvbnMgb3RoZXIgdGhhbiBzeW50YXggZXJyb3JzCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYzsgCi0gICAgZG9jdW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChuZXcgTWVzc2Fn
ZUV2ZW50KG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgc291cmNlKSwgZWMsIHRydWUpOworICAgIC8v
IFNjaGVkdWxlIHRoZSBtZXNzYWdlLgorICAgIFBvc3RNZXNzYWdlVGltZXIqIHRpbWVyID0gbmV3
IFBvc3RNZXNzYWdlVGltZXIodGhpcywgbmV3IE1lc3NhZ2VFdmVudChtZXNzYWdlLCBzb3VyY2VP
cmlnaW4sIHNvdXJjZSksIHRhcmdldC5nZXQoKSk7CisgICAgdGltZXItPnN0YXJ0T25lU2hvdCgw
KTsKK30KKwordm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZChQb3N0TWVzc2Fn
ZVRpbWVyKiB0KQoreworICAgIE93blB0cjxQb3N0TWVzc2FnZVRpbWVyPiB0aW1lcih0KTsKKwor
ICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRpbWVyLT50
YXJnZXRPcmlnaW4oKSkgeworICAgICAgICAvLyBDaGVjayB0YXJnZXQgb3JpZ2luIG5vdyBzaW5j
ZSB0aGUgdGFyZ2V0IGRvY3VtZW50IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIHNpbWVyIHdh
cyBzY2hlZHVsZWQuCisgICAgICAgIGlmICghdGltZXItPnRhcmdldE9yaWdpbigpLT5pc1NhbWVT
Y2hlbWVIb3N0UG9ydChkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkgeworICAgICAgICAg
ICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIHBvc3QgbWVzc2Fn
ZSB0byAlcy4gUmVjaXBpZW50IGhhcyBvcmlnaW4gJXMuXG4iLCAKKyAgICAgICAgICAgICAgICB0
aW1lci0+dGFyZ2V0T3JpZ2luKCktPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGNvbnNvbGUoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxl
dmVsLCBtZXNzYWdlLCAwLCBTdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGRvY3VtZW50KCktPmRpc3Bh
dGNoRXZlbnQodGltZXItPmV2ZW50KCksIGVjLCB0cnVlKTsKIH0KICNlbmRpZgogCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9yeTsKICAgICBjbGFzcyBMb2NhdGlvbjsKKyNpZiBF
TkFCTEUoQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HKQorICAgIGNsYXNzIFBvc3RNZXNzYWdlVGlt
ZXI7CisjZW5kaWYKICAgICBjbGFzcyBOYXZpZ2F0b3I7CiAgICAgY2xhc3MgU2NyZWVuOwogCkBA
IC0xNzMsNyArMTc2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBET01BcHBsaWNh
dGlvbkNhY2hlKiBhcHBsaWNhdGlvbkNhY2hlKCkgY29uc3Q7CiAjZW5kaWYKICNpZiBFTkFCTEUo
Q1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HKQotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyog
c291cmNlLCBFeGNlcHRpb25Db2RlJiBlY0ZvclNlbmRlcikgY29uc3Q7CisgICAgICAgIHZvaWQg
cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9y
aWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9p
ZCBwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9zdE1lc3NhZ2VUaW1lciopOwogI2VuZGlmCiAKICAg
ICAgICAgdm9pZCBzY3JvbGxCeShpbnQgeCwgaW50IHkpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBtb2R1bGUgd2luZG93IHsKIAogI2lmIGRlZmlu
ZWQoRU5BQkxFX0NST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKICAgICAgICAgLy8gY3Jvc3MtZG9j
dW1lbnQgbWVzc2FnaW5nCi0gICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIEN1c3Rv
bV0gdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBE
T01TdHJpbmcgdGFyZ2V0T3JpZ2luKQorICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5
LCBDdXN0b21dIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIERPTVN0
cmluZyB0YXJnZXRPcmlnaW4pCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICNl
bmRpZgogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMjkxMikKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDA4LTA1LTA2ICBBZGFtIEJhcnRo
ICA8YWJhcnRoLXdlYmtpdEBhZGFtYmFydGguY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NzI1CisgICAgICAgIFVwZGF0ZSB0ZXN0cyBmb3IgYXN5bmNocm9ub3VzIHBvc3RNZXNz
YWdlLgorCisgICAgICAgIENvbGxpbiBKYWNrc29uIDxjb2xsaW5qLXdlYmtpdEBjb2xsaW5qYWNr
c29uLmNvbT4gYWxzbyBjb250cmlidXRlZCB0byB0aGlzIHBhdGNoLgorCisgICAgICAgICogaHR0
cC90ZXN0cy9tZXNzYWdpbmcvY3Jvc3MtZG9tYWluLW1lc3NhZ2Utc2VuZC5odG1sOgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbWVzc2FnaW5nL3Jlc291cmNlcy9jcm9zcy1kb21haW4tbWVzc2FnZS1y
ZWNlaXZlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1h
Y2Nlc3MtZGVsZXRlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1m
cmFtZS1hY2Nlc3MtaGlzdG9yeS1wdXQuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1sb2NhdGlvbi1wdXQuaHRtbDoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9kZWxpdmVy
eS1vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RN
ZXNzYWdlL2ludmFsaWQtb3JpZ2luLXRocm93cy1leGNlcHRpb24tZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhy
b3dzLWV4Y2VwdGlvbi5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1l
c3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQtYnktYmFzZS10YWctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQtYnkt
YmFzZS10YWcuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdl
L29yaWdpbi11bmFmZmVjdGVkLWJ5LWRvY3VtZW50LWRvbWFpbi1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1i
eS1kb2N1bWVudC1kb21haW4uaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Bv
c3RNZXNzYWdlL3Jlc291cmNlcy9qYXZhc2NyaXB0LXBvc3QtbWVzc2FnZS1zZW5kZXIuaHRtbDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3Jlc291cmNlcy9wb3N0
LW1lc3NhZ2UtbGlzdGVuZXIuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Bv
c3RNZXNzYWdlL3Jlc291cmNlcy9yZWN2LmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3RhcmdldC1vcmlnaW4tZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvdGFyZ2V0LW9yaWdpbi5odG1sOgor
ICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2Nyb3NzLWZyYW1lLWlmcmFt
ZS1mb3ItZGVsZXRlLXRlc3QuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jl
c291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9yLWhpc3RvcnktcHV0LXRlc3QuaHRtbDoKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUt
Zm9yLWxvY2F0aW9uLXB1dC10ZXN0Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0
eS9yZXNvdXJjZXMveHNzLWV2YWwzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0
eS94c3MtZXZhbC5odG1sOgorCiAyMDA4LTA1LTA1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbWVzc2FnaW5nL2Nyb3NzLWRvbWFpbi1tZXNzYWdlLXNlbmQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lc3NhZ2luZy9jcm9zcy1kb21h
aW4tbWVzc2FnZS1zZW5kLmh0bWwJKHJldmlzaW9uIDMyOTEyKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9tZXNzYWdpbmcvY3Jvc3MtZG9tYWluLW1lc3NhZ2Utc2VuZC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xMiw3ICsxMiw3IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKIH0KIAogZnVuY3Rpb24gcG9zdEl0ICgpIHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVjZWl2ZXIiKS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKCJTb21ldGhpbmciKTsKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVjZWl2ZXIiKS5jb250ZW50V2luZG93LnBvc3RN
ZXNzYWdlKCJTb21ldGhpbmciLCAiKiIpOwogfQogCiBmdW5jdGlvbiByZWNlaXZlcihlKSB7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lc3NhZ2luZy9yZXNvdXJjZXMvY3Jvc3MtZG9t
YWluLW1lc3NhZ2UtcmVjZWl2ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbWVzc2FnaW5nL3Jlc291cmNlcy9jcm9zcy1kb21haW4tbWVzc2FnZS1yZWNlaXZlLmh0
bWwJKHJldmlzaW9uIDMyOTEyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZXNzYWdpbmcv
cmVzb3VyY2VzL2Nyb3NzLWRvbWFpbi1tZXNzYWdlLXJlY2VpdmUuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTAsNyArMTAsNyBAQCBmdW5jdGlvbiByZWNlaXZlcihlKSB7CiAgICAgdmFyIHJlc3Vs
dCA9ICIiOwogICAgIHJlc3VsdCArPSAiZGF0YTogIiArIGUuZGF0YSArICJcbiI7CiAgICAgcmVz
dWx0ICs9ICJvcmlnaW46ICIgKyBlLm9yaWdpbiArICJcbiI7Ci0gICAgZS5zb3VyY2UucG9zdE1l
c3NhZ2UocmVzdWx0KTsgICAKKyAgICBlLnNvdXJjZS5wb3N0TWVzc2FnZShyZXN1bHQsICIqIik7
ICAgCiB9CiAKIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWNlaXZlciwg
ZmFsc2UpOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFt
ZS1hY2Nlc3MtZGVsZXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3MtZGVsZXRlLmh0bWwJKHJldmlzaW9uIDMyOTEy
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mt
ZGVsZXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgICAg
IHNob3VsZEJlKCJldmFsKCdkZWxldGUgdGFyZ2V0V2luZG93LmxvY2F0aW9uLmV4aXN0aW5nUHJv
cGVydHknKSIsICJmYWxzZSIpOwogICAgICAgICAgICAgc2hvdWxkQmUoImV2YWwoJ2RlbGV0ZSB0
YXJnZXRXaW5kb3cubG9jYXRpb25bMV0nKSIsICJmYWxzZSIpOwogCi0gICAgICAgICAgICB0YXJn
ZXRXaW5kb3cucG9zdE1lc3NhZ2UoImRlbGV0aW5nVmFsdWVzQ29tcGxldGUiKTsKKyAgICAgICAg
ICAgIHRhcmdldFdpbmRvdy5wb3N0TWVzc2FnZSgiZGVsZXRpbmdWYWx1ZXNDb21wbGV0ZSIsICIq
Iik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwvaGVhZD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLWhpc3RvcnktcHV0Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFt
ZS1hY2Nlc3MtaGlzdG9yeS1wdXQuaHRtbAkocmV2aXNpb24gMzI5MTIpCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1oaXN0b3J5LXB1dC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICAgICB0cnkgeyB0YXJn
ZXRXaW5kb3cuaGlzdG9yeS5jdXN0b21BdHRyaWJ1dGUgPSAiRkFJTCEhIENVU1RPTSBjdXN0b21B
dHRyaWJ1dGUiOyB9IGNhdGNoKGUpIHsgbG9nKGUpOyB9CiAKICAgICAgICAgICAgIGlmICh3aW5k
b3cucG9zdE1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdl
KCJzZXR0aW5nVmFsdWVzQ29tcGxldGUiKTsKKyAgICAgICAgICAgICAgICB0YXJnZXRXaW5kb3cu
cG9zdE1lc3NhZ2UoInNldHRpbmdWYWx1ZXNDb21wbGV0ZSIsICIqIik7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgbG9nKCJcblNldCBUZXN0IGNvbXBsZXRlISAgQ2xpY2sgYnV0
dG9uIGVudGl0bGVkICdTdGVwIDIgLSBTZXQgQ2hlY2snIHRvIGZpbmlzaCB0aGUgdGVzdC4iKTsK
ICAgICAgICAgfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1m
cmFtZS1hY2Nlc3MtbG9jYXRpb24tcHV0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3MtbG9jYXRpb24tcHV0Lmh0bWwJ
KHJldmlzaW9uIDMyOTEyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9z
cy1mcmFtZS1hY2Nlc3MtbG9jYXRpb24tcHV0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAKICAgICAgICAgICAgIHRyeSB7IHRhcmdldFdpbmRvdy5sb2NhdGlvbi5jdXN0b21B
dHRyaWJ1dGUgPSAiRkFJTCEhIENVU1RPTSBjdXN0b21BdHRyaWJ1dGUiOyB9IGNhdGNoKGUpIHsg
bG9nKGUpOyB9CiAKICAgICAgICAgICAgIGlmICh3aW5kb3cucG9zdE1lc3NhZ2UpCi0gICAgICAg
ICAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdlKCJzZXR0aW5nVmFsdWVzQ29tcGxldGUi
KTsKKyAgICAgICAgICAgICAgICB0YXJnZXRXaW5kb3cucG9zdE1lc3NhZ2UoInNldHRpbmdWYWx1
ZXNDb21wbGV0ZSIsICIqIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbG9n
KCJcblNldCBUZXN0IGNvbXBsZXRlISAgQ2xpY2sgYnV0dG9uIGVudGl0bGVkICdTdGVwIDIgLSBT
ZXQgQ2hlY2snIHRvIGZpbmlzaCB0aGUgdGVzdC4iKTsKICAgICAgICAgfQpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtZXZhbC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzLWV2YWwuaHRtbAkocmV2aXNpb24gMzI5
MTIpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ldmFsLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAgZnVuY3Rpb24gc2hvdWxkQmUoYURlc2NyaXB0
aW9uLCBhLCBiKQogICAgIH0KIH0KIAotYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0
aW9uKCkKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbigpCiB7
CiAgICAgc2hvdWxkQmUoImV2YWwuY2FsbChmcmFtZXNbMF0sICdkb2N1bWVudCcpIiwgKGZ1bmN0
aW9uKCkgeyB0cnkgeyByZXR1cm4gZXZhbC5jYWxsKGZyYW1lc1swXSwgJ2RvY3VtZW50Jyk7IH0g
Y2F0Y2goZSkgeyByZXR1cm4gZS5uYW1lOyB9IH0pKCksICJFdmFsRXJyb3IiKTsKIApJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9kZWxpdmVyeS1vcmRl
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9wb3N0TWVzc2FnZS9kZWxpdmVyeS1vcmRlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5
LW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACit3aW5kb3cu
bG9jYXRpb24uaHJlZiA9IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS9kZWxpdmVyeS1vcmRlci5odG1sCisKK3dhaXRpbmcuLi4KK0JlZm9yZSBjYWxsaW5nIHBvc3RN
ZXNzYWdlCitBZnRlciBjYWxsaW5nIHBvc3RNZXNzYWdlCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRh
PSJSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJNZXNzYWdlIGZyb20gcGFyZW50IiBvcmlnaW49Imh0
dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgorUmVj
ZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iZG9uZSIgb3JpZ2lu
PSJodHRwOi8vMTI3LjAuMC4xOjgwMDAiIiBvcmlnaW49Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvZGVsaXZl
cnktb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2RlbGl2ZXJ5LW9yZGVyLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVjdi5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWN2
LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpOworICAgIHZhciB3aW4gPSBpZnJhbWUuY29udGVudFdp
bmRvdzsKKworICAgIGxvZygnQmVmb3JlIGNhbGxpbmcgcG9zdE1lc3NhZ2UnKTsKKyAgICB3aW4u
cG9zdE1lc3NhZ2UoJ01lc3NhZ2UgZnJvbSBwYXJlbnQnLCAnKicpOworICAgIGxvZygnQWZ0ZXIg
Y2FsbGluZyBwb3N0TWVzc2FnZScpOworCisgICAgd2luLnBvc3RNZXNzYWdlKCdkb25lJywgJyon
KTsKK30KKzwvc2NyaXB0PgorPGJhc2UgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iPgor
PGJvZHk+Cis8ZGl2PndpbmRvdy5sb2NhdGlvbi5ocmVmID0gPHNjcmlwdD5kb2N1bWVudC53cml0
ZShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTs8L3NjcmlwdD48L2Rpdj4KKzxkaXY+PGlmcmFtZSBz
cmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNvdXJjZXMv
cG9zdC1tZXNzYWdlLWxpc3RlbmVyLmh0bWwiIG9ubG9hZD0idGVzdCgpIgorICBpZD0iY2hpbGQi
IHdpZHRoPSI4MDAiIGhlaWdodD0iMzAwIiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgYmxhY2s7
Ij4KKzwvaWZyYW1lPjwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij53YWl0aW5nLi4uPC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
cG9zdE1lc3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dzLWV4Y2VwdGlvbi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS9pbnZhbGlkLW9yaWdpbi10aHJvd3MtZXhjZXB0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MzI5MTIpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL2lu
dmFsaWQtb3JpZ2luLXRocm93cy1leGNlcHRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwICsxLDEwIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogVW5hYmxlIHRvIHBv
c3QgbWVzc2FnZSB0byBhc2RmOi4gUmVjaXBpZW50IGhhcyBvcmlnaW4gaHR0cDovL2xvY2FsaG9z
dDo4MDAwLgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFVuYWJsZSB0byBwb3N0IG1lc3NhZ2Ug
dG8gYXNkZjovLy4gUmVjaXBpZW50IGhhcyBvcmlnaW4gaHR0cDovL2xvY2FsaG9zdDo4MDAwLgog
Ci1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byBodHRw
Oi4gUmVjaXBpZW50IGhhcyBvcmlnaW4gaHR0cDovL2xvY2FsaG9zdDo4MDAwLgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDA6IFVuYWJsZSB0byBwb3N0IG1lc3NhZ2UgdG8gaHR0cDovLy4gUmVjaXBp
ZW50IGhhcyBvcmlnaW4gaHR0cDovL2xvY2FsaG9zdDo4MDAwLgogCi1DT05TT0xFIE1FU1NBR0U6
IGxpbmUgMDogVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byAvdG1wL2Zvby4gUmVjaXBpZW50IGhh
cyBvcmlnaW4gaHR0cDovL2xvY2FsaG9zdDo4MDAwLgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6
IFVuYWJsZSB0byBwb3N0IG1lc3NhZ2UgdG8gbG9jYWxob3N0OjgwMDAuCiAKLUNPTlNPTEUgTUVT
U0FHRTogbGluZSAwOiBVbmFibGUgdG8gcG9zdCBtZXNzYWdlIHRvIC8vbG9jYWxob3N0LiBSZWNp
cGllbnQgaGFzIG9yaWdpbiBodHRwOi8vbG9jYWxob3N0OjgwMDAuCitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMDogVW5hYmxlIHRvIHBvc3QgbWVzc2FnZSB0byBsb2NhbGhvc3Q6ODAwMC4KIAogd2lu
ZG93LmxvY2F0aW9uLmhyZWYgPSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvcG9zdE1l
c3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dzLWV4Y2VwdGlvbi5odG1sCiAKQEAgLTE1LDMgKzE1
LDQgQEAgUG9zdGVkIG1lc3NhZ2UgdG8gJ2FzZGY6JyB3aXRob3V0IGFueSBleAogUG9zdGVkIG1l
c3NhZ2UgdG8gJ2h0dHA6JyB3aXRob3V0IGFueSBleGNlcHRpb25zLgogUG9zdGVkIG1lc3NhZ2Ug
dG8gJy90bXAvZm9vJyB3aXRob3V0IGFueSBleGNlcHRpb25zLgogUG9zdGVkIG1lc3NhZ2UgdG8g
Jy8vbG9jYWxob3N0JyB3aXRob3V0IGFueSBleGNlcHRpb25zLgorUmVjZWl2ZWQgbWVzc2FnZTog
ZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iZG9uZSIgb3JpZ2luPSJodHRwOi8vMTI3LjAu
MC4xOjgwMDAiIiBvcmlnaW49Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dz
LWV4Y2VwdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkvcG9zdE1lc3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dzLWV4Y2VwdGlvbi5odG1sCShy
ZXZpc2lvbiAzMjkxMikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1l
c3NhZ2UvaW52YWxpZC1vcmlnaW4tdGhyb3dzLWV4Y2VwdGlvbi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIwICsxLDEyIEBACi08c2NyaXB0PgotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKLSAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotPC9zY3JpcHQ+Ci0K
IDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cmVjdi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiB9Ci0KLWZ1bmN0aW9uIHJlY3YoZSkg
ewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gIjxi
cj4iICsgZS5kYXRhOwotfQogIAogZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIs
IHJlY3YsIGZhbHNlKTsKIApAQCAtNDMsOCArMzUsOCBAQCBmdW5jdGlvbiB0ZXN0KCkgewogICAg
IHRyeVBvc3RNZXNzYWdlKCIvdG1wL2ZvbyIpOwogICAgIHRyeVBvc3RNZXNzYWdlKCIvL2xvY2Fs
aG9zdCIpOwogCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIAorICAgIHdpbi5wb3N0TWVz
c2FnZSgnZG9uZScsICcqJyk7CiB9CiA8L3NjcmlwdD4KIDxib2R5PgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1i
YXNlLXRhZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1iYXNlLXRhZy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDMyOTEyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1iYXNlLXRhZy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1IEBACiB3aW5kb3cubG9jYXRpb24uaHJlZiA9
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZl
Y3RlZC1ieS1iYXNlLXRhZy5odG1sCiAKLVJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9Ik1lc3NhZ2Ug
ZnJvbSBwYXJlbnQiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIgord2FpdGluZy4uLgor
UmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iTWVzc2FnZSBm
cm9tIHBhcmVudCIgb3JpZ2luPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAiIiBvcmlnaW49Imh0dHA6
Ly9sb2NhbGhvc3Q6ODAwMCIKK1JlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlJlY2VpdmVkIG1lc3Nh
Z2U6IGRhdGE9ImRvbmUiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJo
dHRwOi8vbG9jYWxob3N0OjgwMDAiCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3Bvc3RNZXNzYWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWJhc2UtdGFnLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmln
aW4tdW5hZmZlY3RlZC1ieS1iYXNlLXRhZy5odG1sCShyZXZpc2lvbiAzMjkxMikKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQt
YnktYmFzZS10YWcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyNSArMSwyMSBAQAogPCFET0NU
WVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWN2Lmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQ+CiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKIH0KIAotZnVuY3Rpb24gcmVjdihlKSB7Ci0gICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmZpcnN0Q2hpbGQuZGF0YSA9IGUuZGF0
YTsKLQotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLX0KLQogZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibWVzc2FnZSIsIHJlY3YsIGZhbHNlKTsKIAogZnVuY3Rpb24gdGVzdCgpIHsKICAgICB2
YXIgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7CiAgICAgdmFyIHdp
biA9IGlmcmFtZS5jb250ZW50V2luZG93OwotICAgIHdpbi5wb3N0TWVzc2FnZSgnTWVzc2FnZSBm
cm9tIHBhcmVudCcpOworICAgIHdpbi5wb3N0TWVzc2FnZSgnTWVzc2FnZSBmcm9tIHBhcmVudCcs
ICcqJyk7CisKKyAgICB3aW4ucG9zdE1lc3NhZ2UoJ2RvbmUnLCAnKicpOwogfQogPC9zY3JpcHQ+
CiA8YmFzZSBocmVmPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyI+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWRv
Y3VtZW50LWRvbWFpbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1kb2N1bWVu
dC1kb21haW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzMjkxMikKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVuYWZmZWN0ZWQtYnktZG9jdW1l
bnQtZG9tYWluLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDYgQEAKIHdp
bmRvdy5sb2NhdGlvbi5ocmVmID0gaHR0cDovLzEyNy4wLjAuMTo4MDAwL3NlY3VyaXR5L3Bvc3RN
ZXNzYWdlL29yaWdpbi11bmFmZmVjdGVkLWJ5LWRvY3VtZW50LWRvbWFpbi5odG1sCiBkb2N1bWVu
dC5kb21haW4gPSAwLjAuMQogCi1SZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJNZXNzYWdlIGZyb20g
cGFyZW50IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIKK3dhaXRpbmcuLi4KK1JlY2Vp
dmVkIG1lc3NhZ2U6IGRhdGE9IlJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9Ik1lc3NhZ2UgZnJvbSBw
YXJlbnQiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIiIgb3JpZ2luPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAiCitSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJSZWNlaXZlZCBtZXNzYWdlOiBk
YXRhPSJkb25lIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwIgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9w
b3N0TWVzc2FnZS9vcmlnaW4tdW5hZmZlY3RlZC1ieS1kb2N1bWVudC1kb21haW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL29y
aWdpbi11bmFmZmVjdGVkLWJ5LWRvY3VtZW50LWRvbWFpbi5odG1sCShyZXZpc2lvbiAzMjkxMikK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uvb3JpZ2luLXVu
YWZmZWN0ZWQtYnktZG9jdW1lbnQtZG9tYWluLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjUg
KzEsMjEgQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvcmVjdi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiB9CiAKLWZ1bmN0aW9u
IHJlY3YoZSkgewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5maXJzdENo
aWxkLmRhdGEgPSBlLmRhdGE7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci0KIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWN2LCBmYWxzZSk7CiAKIGZ1bmN0aW9u
IHRlc3QoKSB7CiAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGls
ZCcpOwogICAgIHZhciB3aW4gPSBpZnJhbWUuY29udGVudFdpbmRvdzsKLSAgICB3aW4ucG9zdE1l
c3NhZ2UoJ01lc3NhZ2UgZnJvbSBwYXJlbnQnKTsKKyAgICB3aW4ucG9zdE1lc3NhZ2UoJ01lc3Nh
Z2UgZnJvbSBwYXJlbnQnLCAnKicpOworCisgICAgd2luLnBvc3RNZXNzYWdlKCdkb25lJywgJyon
KTsKIH0KIAogZG9jdW1lbnQuZG9tYWluID0gIjAuMC4xIjsKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvdGFyZ2V0LW9yaWdpbi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2Fn
ZS90YXJnZXQtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMzI5MTIpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3RhcmdldC1vcmlnaW4tZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxMSArMTEsMTMgQEAgQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDA6IFVuYWJsZSB0byBwb3N0IAogd2luZG93LmxvY2F0aW9uLmhyZWYgPSBodHRwOi8v
MTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvdGFyZ2V0LW9yaWdpbi5odG1sCiAK
IHdhaXRpbmcuLi4KLVJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmlnaW49aHR0cDov
L2xvY2FsaG9zdDo4MDAwIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIKLVJlY2VpdmVk
IG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwLyIgb3Jp
Z2luPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAiCi1SZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlp
bmcgb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9mb28iIG9yaWdpbj0iaHR0cDovLzEyNy4w
LjAuMTo4MDAwIgotUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1odHRwOi8v
bG9jYWxob3N0OjgwMDAvZm9vP2JhciIgb3JpZ2luPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAiCi1S
ZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAw
MC9mb28/YmFyI2JheiIgb3JpZ2luPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAiCi1SZWNlaXZlZCBt
ZXNzYWdlOiBkYXRhPSJUcnlpbmcgb3JpZ2luPWh0dHA6Ly91c2VyOnBhc3NAbG9jYWxob3N0Ojgw
MDAvZm9vP2JhciNiYXoiIG9yaWdpbj0iaHR0cDovLzEyNy4wLjAuMTo4MDAwIgotUmVjZWl2ZWQg
bWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1udWxsIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4w
LjE6ODAwMCIKLVJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmlnaW49dW5kZWZpbmVk
IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIKK0Vycm9yIHNlbmRpbmcgbWVzc2FnZSB0
byBudWxsLiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgorRXJyb3Igc2VuZGlu
ZyBtZXNzYWdlIHRvIHVuZGVmaW5lZC4gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIKK1JlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWlu
ZyBvcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6
ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgorUmVjZWl2ZWQgbWVzc2FnZTog
ZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1odHRwOi8vbG9jYWxo
b3N0OjgwMDAvIiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwIgorUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2Fn
ZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAvZm9vIiBvcmlnaW49
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgor
UmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9y
aWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAvZm9vP2JhciIgb3JpZ2luPSJodHRwOi8vMTI3LjAu
MC4xOjgwMDAiIiBvcmlnaW49Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIKK1JlY2VpdmVkIG1lc3Nh
Z2U6IGRhdGE9IlJlY2VpdmVkIG1lc3NhZ2U6IGRhdGE9IlRyeWluZyBvcmlnaW49aHR0cDovL2xv
Y2FsaG9zdDo4MDAwL2Zvbz9iYXIjYmF6IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIi
IG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgorUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0i
UmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj1odHRwOi8vdXNlcjpwYXNzQGxv
Y2FsaG9zdDo4MDAwL2Zvbz9iYXIjYmF6IiBvcmlnaW49Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIi
IG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgorUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0i
UmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iVHJ5aW5nIG9yaWdpbj0qIiBvcmlnaW49Imh0dHA6Ly8x
MjcuMC4wLjE6ODAwMCIiIG9yaWdpbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIgorUmVjZWl2ZWQg
bWVzc2FnZTogZGF0YT0iUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iZG9uZSIgb3JpZ2luPSJodHRw
Oi8vMTI3LjAuMC4xOjgwMDAiIiBvcmlnaW49Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvdGFyZ2V0LW9yaWdp
bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9z
dE1lc3NhZ2UvdGFyZ2V0LW9yaWdpbi5odG1sCShyZXZpc2lvbiAzMjkxMikKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvdGFyZ2V0LW9yaWdpbi5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDIwICsxLDIxIEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgog
PGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlY3YuanMiPjwvc2NyaXB0PgogPHNjcmlw
dD4KIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOwogfQogCi1mdW5jdGlvbiByZWN2KGUpIHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9ICI8YnI+IiArIGUuZGF0YTsKLX0KLSAKIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWN2LCBmYWxzZSk7CiAKIGZ1bmN0aW9u
IHRyeVBvc3RNZXNzYWdlKHdpbiwgb3JpZ2luKSB7Ci0gICAgd2luLnBvc3RNZXNzYWdlKCJUcnlp
bmcgb3JpZ2luPSIgKyBvcmlnaW4sIG9yaWdpbik7CisgICAgdHJ5IHsKKyAgICAgICAgd2luLnBv
c3RNZXNzYWdlKCJUcnlpbmcgb3JpZ2luPSIgKyBvcmlnaW4sIG9yaWdpbik7CisgICAgfSBjYXRj
aChleCkgeworICAgICAgICBsb2coIkVycm9yIHNlbmRpbmcgbWVzc2FnZSB0byAiICsgb3JpZ2lu
ICsgIi4gIiArIGV4KTsKKyAgICB9CiB9CiAKIGZ1bmN0aW9uIHRlc3QoKSB7CkBAIC0yOCw4ICsy
OSw3IEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgdHJ5UG9zdE1lc3NhZ2Uod2luLCAiaHR0cDov
L2xvY2FsaG9zdDo4MDAwL2Zvbz9iYXIiKTsKICAgICB0cnlQb3N0TWVzc2FnZSh3aW4sICJodHRw
Oi8vbG9jYWxob3N0OjgwMDAvZm9vP2JhciNiYXoiKTsKICAgICB0cnlQb3N0TWVzc2FnZSh3aW4s
ICJodHRwOi8vdXNlcjpwYXNzQGxvY2FsaG9zdDo4MDAwL2Zvbz9iYXIjYmF6Iik7Ci0gICAgdHJ5
UG9zdE1lc3NhZ2Uod2luLCBudWxsKTsKLSAgICB0cnlQb3N0TWVzc2FnZSh3aW4sIHVuZGVmaW5l
ZCk7CisgICAgdHJ5UG9zdE1lc3NhZ2Uod2luLCAiKiIpOwogCiAgICAgLy8gU2hvdWxkIGZhaWw6
CiAgICAgdHJ5UG9zdE1lc3NhZ2Uod2luLCAiaHR0cDovL2xvY2FsaG9zdDo5MDkwIik7CkBAIC0z
OCw4ICszOCwxMSBAQCBmdW5jdGlvbiB0ZXN0KCkgewogICAgIHRyeVBvc3RNZXNzYWdlKHdpbiwg
Imh0dHBzOi8vbG9jYWxob3N0OjgwMDAiKTsKICAgICB0cnlQb3N0TWVzc2FnZSh3aW4sICJodHRw
Oi8vd3d3LmV4YW1wbGUuY29tIik7CiAKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgLy8g
U2hvdWxkIHRocm93IHN5bnRheCBlcnJvcjoKKyAgICB0cnlQb3N0TWVzc2FnZSh3aW4sIG51bGwp
OworICAgIHRyeVBvc3RNZXNzYWdlKHdpbiwgdW5kZWZpbmVkKTsKKworICAgIHdpbi5wb3N0TWVz
c2FnZSgnZG9uZScsICcqJyk7CiB9CiA8L3NjcmlwdD4KIDxib2R5PgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNvdXJjZXMvamF2YXNjcmlwdC1w
b3N0LW1lc3NhZ2Utc2VuZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNvdXJjZXMvamF2YXNjcmlwdC1wb3N0LW1lc3Nh
Z2Utc2VuZGVyLmh0bWwJKHJldmlzaW9uIDMyOTEyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9wb3N0TWVzc2FnZS9yZXNvdXJjZXMvamF2YXNjcmlwdC1wb3N0LW1lc3NhZ2Ut
c2VuZGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiA8c2NyaXB0PgogZnVu
Y3Rpb24gbmF2KCkgewogICAgIHZhciB1cmwgPSAiamF2YXNjcmlwdDonPHNjcmlwdD4iICsgCi0g
ICAgICAidG9wLnBvc3RNZXNzYWdlKFwiSGVsbG8gZnJvbSBjaGlsZFwiKTsiICsgCisgICAgICAi
dG9wLnBvc3RNZXNzYWdlKFwiSGVsbG8gZnJvbSBjaGlsZFwiLCBcIipcIik7IiArIAogICAgICAg
ImRvY3VtZW50LndyaXRlKFwiTWVzc2FnZSBzZW50XCIpOyIgKwogICAgICAgIjwvc2NyaSIgKyAi
cHQ+JyI7CiAKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3Nh
Z2UvcmVzb3VyY2VzL3Bvc3QtbWVzc2FnZS1saXN0ZW5lci5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvcmVzb3VyY2VzL3Bvc3Qt
bWVzc2FnZS1saXN0ZW5lci5odG1sCShyZXZpc2lvbiAzMjkxMikKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2UvcmVzb3VyY2VzL3Bvc3QtbWVzc2FnZS1saXN0
ZW5lci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC01LDcgKzUsNyBAQAogPHNjcmlwdD4KIGZ1bmN0
aW9uIHJlY3YoZSkgewogICAgIHZhciBtc2cgPSAnUmVjZWl2ZWQgbWVzc2FnZTogZGF0YT0iJyAr
IGUuZGF0YSArICciIG9yaWdpbj0iJyArIGUub3JpZ2luICsgJyInOwotICAgIHRvcC5wb3N0TWVz
c2FnZShtc2cpOworICAgIHRvcC5wb3N0TWVzc2FnZShtc2csICcqJyk7CiB9CiAKIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWN2LCBmYWxzZSk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3Jlc291cmNlcy9yZWN2LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcG9zdE1lc3NhZ2Uv
cmVzb3VyY2VzL3JlY3YuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3Bvc3RNZXNzYWdlL3Jlc291cmNlcy9yZWN2LmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1IEBACitmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtc2cpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyku
YXBwZW5kQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gcmVjdihlKSB7CisgICAgdmFyIG1zZyA9
ICdSZWNlaXZlZCBtZXNzYWdlOiBkYXRhPSInICsgZS5kYXRhICsgJyIgb3JpZ2luPSInICsgZS5v
cmlnaW4gKyAnIic7CisKKyAgICBsb2cobXNnKTsKKworICAgIGlmIChlLmRhdGEubWF0Y2goL2Rh
dGE9ImRvbmUiLykgJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2Nyb3NzLWZyYW1lLWlmcmFtZS1mb3ItZGVsZXRl
LXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3Jlc291cmNlcy9jcm9zcy1mcmFtZS1pZnJhbWUtZm9yLWRlbGV0ZS10ZXN0Lmh0bWwJKHJldmlz
aW9uIDMyOTEyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMv
Y3Jvc3MtZnJhbWUtaWZyYW1lLWZvci1kZWxldGUtdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xOCw3ICsxOCw3IEBACiAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uZXhpc3RpbmdQcm9w
ZXJ0eSA9ICJ0ZXN0IHZhbHVlIjsKICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvblsxXSA9ICJ0
ZXN0IHZhbHVlIjsKIAotICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSgic2V0
VmFsdWVzQ29tcGxldGUiKTsKKyAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uo
InNldFZhbHVlc0NvbXBsZXRlIiwgIioiKTsKICAgICAgICAgfQogCiAgICAgICAgIHNldENoZWNr
ID0gZnVuY3Rpb24oKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNv
dXJjZXMvY3Jvc3MtZnJhbWUtaWZyYW1lLWZvci1oaXN0b3J5LXB1dC10ZXN0Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3Jvc3Mt
ZnJhbWUtaWZyYW1lLWZvci1oaXN0b3J5LXB1dC10ZXN0Lmh0bWwJKHJldmlzaW9uIDMyOTEyKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3Jvc3MtZnJhbWUt
aWZyYW1lLWZvci1oaXN0b3J5LXB1dC10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAKICAgICAgICAgICAgIGN1c3RvbUF0dHJpYnV0ZU9sZCA9IHdpbmRvdy5oaXN0b3J5
LmN1c3RvbUF0dHJpYnV0ZTsKIAogICAgICAgICAgICAgaWYgKHdpbmRvdy5wb3N0TWVzc2FnZSkK
LSAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKCJzdG9yZWRPbGRWYWx1
ZXNDb21wbGV0ZSIpOworICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uo
InN0b3JlZE9sZFZhbHVlc0NvbXBsZXRlIiwgIioiKTsKICAgICAgICAgfQogCiAgICAgICAgIHNl
dENoZWNrID0gZnVuY3Rpb24oKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9yZXNvdXJjZXMvY3Jvc3MtZnJhbWUtaWZyYW1lLWZvci1sb2NhdGlvbi1wdXQtdGVzdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L2Nyb3NzLWZyYW1lLWlmcmFtZS1mb3ItbG9jYXRpb24tcHV0LXRlc3QuaHRtbAkocmV2aXNpb24g
MzI5MTIpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcm9z
cy1mcmFtZS1pZnJhbWUtZm9yLWxvY2F0aW9uLXB1dC10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgIGN1c3RvbUF0dHJpYnV0ZU9sZCA9IHdpbmRv
dy5sb2NhdGlvbi5jdXN0b21BdHRyaWJ1dGU7CiAKICAgICAgICAgICAgIGlmICh3aW5kb3cucG9z
dE1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSgic3Rv
cmVkT2xkVmFsdWVzQ29tcGxldGUiKTsKKyAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBv
c3RNZXNzYWdlKCJzdG9yZWRPbGRWYWx1ZXNDb21wbGV0ZSIsICIqIik7CiAgICAgICAgIH0KIAog
ICAgICAgICBzZXRDaGVjayA9IGZ1bmN0aW9uKCkKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hzcy1ldmFsMy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hzcy1ldmFsMy5odG1sCShyZXZp
c2lvbiAzMjkxMikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L3hzcy1ldmFsMy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAogPHNjcmlwdD4K
LXBhcmVudC5wb3N0TWVzc2FnZSgiZG9uZSIpOworcGFyZW50LnBvc3RNZXNzYWdlKCJkb25lIiwg
IioiKTsKIDwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>