<?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>36213</bug_id>
          
          <creation_ts>2010-03-17 03:34:39 -0700</creation_ts>
          <short_desc>Assertion failure when inspecting a page with workers</short_desc>
          <delta_ts>2010-03-23 11:49:58 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>200651</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-17 03:34:39 -0700</bug_when>
    <thetext>ASSERTION FAILED: m_heap.operationInProgress == NoOperation
(/Users/yurys/WebKitGit/JavaScriptCore/runtime/Collector.cpp:398 void* JSC::Heap::allocate(size_t))

Steps to reproduce:
1. In Debug build navigate to apple.com
2. Open Web Inspector, make sure scripts tab is selected and debugging is on.
3. Navigate to a page with workers

Result:
Pages hangs with the assertion failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201247</commentid>
    <comment_count>1</comment_count>
      <attachid>51018</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-03-18 04:04:49 -0700</bug_when>
    <thetext>Created attachment 51018
Move worker destruction notification from AbstractWorker destructor to worker&apos;s proxy async methods so these are not called from within JS GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201248</commentid>
    <comment_count>2</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-03-18 04:20:47 -0700</bug_when>
    <thetext>David,
could you please have a look at the correctness of this from the worker lifecycle prospective? I had to move inspector notification away from worker destructor, as it would ultimately cause attempts to execute JS, which hits JSC reenterability problem  by trying to allocate on JSC heap while another heap operation (which caused workers destruction) is in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201651</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-18 17:23:32 -0700</bug_when>
    <thetext>There is an unfortunate proliferation of id()... At a minimum it&apos;d be nice to give those ids somewhat more descriptive name, like inspectorId(). Also, why don&apos;t we just use an address of the object (casted to void*) as an id? It seems it is used as a key in some map anyways.

If it&apos;s possible to just use the address as id, then no wiring and storing of id is needed at all...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201986</commentid>
    <comment_count>4</comment_count>
      <attachid>51018</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-19 12:33:50 -0700</bug_when>
    <thetext>Comment on attachment 51018
Move worker destruction notification from AbstractWorker destructor to worker&apos;s proxy async methods so these are not called from within JS GC.

I can look at it from worker&apos;s perspective...

In general, the change is in the right direction because those &quot;proxy&quot; classes control lifetime of workers and their contexts.

However, this patch will work for Dedicated workers, but perhaps not for Shared ones... The Worker object and WorkerContext have different lifetime - former is bounded by GC, while the latter can terminate earlier (via WorkerContext.close() or later (especially true for shared workers). I&apos;m not sure which lifetime you want to capture. It might be that Worker object is still alive but context is destroyed (&quot;worker is terminated&quot;). Also, the worker context of a shared worker can continue &apos;working&apos; while the SharedWorker object is collected, if there is another SharedWorker object somewhere connected to the same worker. 

WorkerMessagingProxy is dealing with DedicatedWorkers. Shared ones are controlled by SharedWorkerRepository-derived objects.

Also, it seems it should be named &quot;didDestroyWorker&quot; since both the worker and worker context can be destroyed by the time this call is made.

&gt; Index: WebCore/ChangeLog

The ChangeLog says basically nothing about the change. It&apos;d be better to get some enough info on &quot;why&quot; and &quot;what&quot; changes.
That way it&apos;s easier to understand what was changing in the project while looking at ChangeLog or (more often) trac.webkit.org.

I think that id() is also not needed - simply passing &apos;this&apos; as Id could suffice.It would be nice to remove the id field.

I&apos;m going to r- because it seems the patch needs updating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202481</commentid>
    <comment_count>5</comment_count>
      <attachid>51283</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-03-22 07:41:44 -0700</bug_when>
    <thetext>Created attachment 51283
Send worker creation/destruction notifications to inspector frontend asynchronously

Dmitry,
After an offline discussion with pfeldman I decided to take slightly different approach -- I&apos;m leaving workers side intact and moving asynchronous tasks creation/execution to the inspector code (I think this is fair, as the problem we&apos;re trying to resolve appears because inspector front-end executes JS to deliver these notifications).
I also removed explicit id field from workers (please note it wouldn&apos;t be a good idea with old design, as we used to create workers synchronously but destroy asynchronously, which would create problems in case same address is re-used when another worker is created. It&apos;s not a problem now, as creation notifications are also async and hence serialized with destruction).
Pre your suggestion, willDestroyWorker() is renamed to didDestroyWorker() (old name was appropriate for old version, but clearly isn&apos;t now).
Obviously, this version only tracks client-side worker objects, but this should be sufficient for inspector needs -- we only care for objects that inspected page is explicitly using, so the fact that a shared worker may exist after it&apos;s not referenced by the page is not so important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202670</commentid>
    <comment_count>6</comment_count>
      <attachid>51283</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-22 12:11:44 -0700</bug_when>
    <thetext>Comment on attachment 51283
Send worker creation/destruction notifications to inspector frontend asynchronously

Awesome, thanks a lot!

&gt; Index: WebCore/inspector/InjectedScriptHost.h
&gt; -    void willDestroyWorker(long id);
&gt; +    void didDestroyWorker(long id);

These might need to be &quot;long long&quot; now, to be able to roundtrip the intptr_t on 64-bit. &quot;long long&quot; is supported by idl and JSValue.

&gt; Index: WebCore/inspector/InspectorController.cpp

&gt;  #if ENABLE(WORKERS)
&gt; -void InspectorController::didCreateWorker(long id, const String&amp; url, bool isSharedWorker)
&gt; +class PostWorkerNotificationToFrontendTask : public ScriptExecutionContext::Task {
&gt; +public:
&gt; +    static PassOwnPtr&lt;PostWorkerNotificationToFrontendTask&gt; create(RefPtr&lt;InspectorWorkerResource&gt; worker, bool isCreated)

The parameter should be PassRefPtr. (http://webkit.org/coding/RefPtr.html)

Also, normally WebKit style is to create and use an enum rather then bool parameter - this makes callsite more readable. In this case, there could be WorkerCreated and WorkerDestroyed values.

&gt; +    PostWorkerNotificationToFrontendTask(RefPtr&lt;InspectorWorkerResource&gt; worker, bool isCreated)

Also should be PassRefPtr.

&gt; +void InspectorController::postWorkerNotificationToFrontend(RefPtr&lt;InspectorWorkerResource&gt; worker, bool isCreated)

Here, just raw pointer InspectorWorkerResource* would be just fine since this function does not take ownership or affects lifetime of the passed resource and relies on the caller to keep it alive.

&gt; +void InspectorController::didCreateWorker(intptr_t id, const String&amp; url, bool isSharedWorker)

I would add another note about bool parameters and named enum values but this is code that already existed before the patch, so no need to change it. :-)

I&apos;d r+ with &quot;fix it on landing&quot; note but it feels there are a few possible changes so let me r- and look forward for an updated patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203029</commentid>
    <comment_count>7</comment_count>
      <attachid>51421</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-03-23 06:55:22 -0700</bug_when>
    <thetext>Created attachment 51421
Send worker creation/destruction notifications to inspector frontend asynchronously

Dmitry,
thanks for the feedback! I&apos;ve implemented most of your recommendations with the exception of &quot;long long&quot; for IDs in InjectedScriptHost -- the idea is, these IDs are for a different type of workers actually -- the &quot;fake&quot; ones, implemented in JS, that we inject when user attempts to debug workers. These IDs never store anything that we get from AbstractWorker::asID() and are rather generated on the inspector side (InjectedScriptHost::nextWorkerId()), so their life-cycle is 
InjectedScriptHost -&gt; JS fake workers implementation -&gt; InspectorController -&gt; InspectorFrontend and hence they need to use an integral type that is not wider than one used in InsectorController &amp; InspectorFrontend. Using long long would actually cause truncation on 32-bit platforms (assuming sizeof(intptr_t) == 4 &amp;&amp; sizeof(long long) == 8). This is still a bit fishy for the case of sizeof(long) &gt; sizeof(intptr_t), but I believe it only happens on 16 bit platforms, so we hardly care.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203107</commentid>
    <comment_count>8</comment_count>
      <attachid>51421</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-23 10:49:00 -0700</bug_when>
    <thetext>Comment on attachment 51421
Send worker creation/destruction notifications to inspector frontend asynchronously

Looks good! 

One tiny nit:

&gt; +void InspectorController::postWorkerNotificationToFrontend(const InspectorWorkerResource&amp; worker, InspectorController::WorkerAction action)
&gt; +{
&gt; +    if (!m_frontend)
&gt; +        return;
&gt; +    switch (action) {
&gt; +    case InspectorController::WorkerCreated:
&gt; +        m_frontend-&gt;didCreateWorker(worker);
&gt; +        break;
&gt; +    case InspectorController::WorkerDestroyed:
&gt; +        m_frontend-&gt;didDestroyWorker(worker);
&gt; +        break;
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

WebKit usually does not have this &apos;default&apos; case since if the value is enum and there is no &apos;default&apos;, the compiler verifies all values of the enum are used. If there is desire to check for some integer value outside of enum range, the &apos;brake&apos; could be replaced by &apos;return&apos; and the ASSERT_NOT_REACHED() added after the whole switch. This way, both checks are active.

Also: if you want to use the commit-queue, mark the corresponding flag as &apos;?&apos; as well, this way the reviewer could see your intention to use the bot and flip it to + with r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203111</commentid>
    <comment_count>9</comment_count>
      <attachid>51437</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-03-23 10:57:01 -0700</bug_when>
    <thetext>Created attachment 51437
Send worker creation/destruction notifications to inspector frontend asynchronously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203112</commentid>
    <comment_count>10</comment_count>
      <attachid>51437</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-23 11:01:29 -0700</bug_when>
    <thetext>Comment on attachment 51437
Send worker creation/destruction notifications to inspector frontend asynchronously

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203133</commentid>
    <comment_count>11</comment_count>
      <attachid>51437</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-23 11:49:53 -0700</bug_when>
    <thetext>Comment on attachment 51437
Send worker creation/destruction notifications to inspector frontend asynchronously

Clearing flags on attachment: 51437

Committed r56404: &lt;http://trac.webkit.org/changeset/56404&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203134</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-23 11:49:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51018</attachid>
            <date>2010-03-18 04:04:49 -0700</date>
            <delta_ts>2010-03-22 07:41:44 -0700</delta_ts>
            <desc>Move worker destruction notification from AbstractWorker destructor to worker&apos;s proxy async methods so these are not called from within JS GC.</desc>
            <filename>workers-assert-patch</filename>
            <type>text/plain</type>
            <size>9586</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjE1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDMtMTggIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBc3NlcnRpb24gZmFpbHVyZSB3aGVuIGluc3BlY3RpbmcgYSBwYWdlIHdpdGggd29ya2Vycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyMTMKKwor
ICAgICAgICAqIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3RXb3JrZXI6On5BYnN0cmFjdFdvcmtlcik6CisgICAgICAgICogd29ya2Vycy9BYnN0
cmFjdFdvcmtlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXb3JrZXI6OmlkKToKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s6OldvcmtlckNvbnRleHREZXN0cm95ZWRUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6V29ya2VyTWVz
c2FnaW5nUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Ondv
cmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5n
UHJveHkuaDoKKwogMjAxMC0wMy0xOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzM2MjQ2PiBOb2RlOjpyZW1vdmVBbGxF
dmVudExpc3RlbmVyc1Nsb3dDYXNlIGlzIGRlY2xhcmVkIGJ1dCBub3QgdXNlZApJbmRleDogV2Vi
Q29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dv
cmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCShyZXZpc2lvbiA1NjE1MikKKysrIFdlYkNvcmUvd29y
a2Vycy9BYnN0cmFjdFdvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKIApAQCAtNTQsMjEgKzUzLDYgQEAgQWJzdHJhY3RXb3JrZXI6OkFic3RyYWN0V29ya2VyKFNj
cmlwdEV4ZQogCiBBYnN0cmFjdFdvcmtlcjo6fkFic3RyYWN0V29ya2VyKCkKIHsKLSAgICBvbkRl
c3Ryb3lXb3JrZXIoKTsKLX0KLQotdm9pZCBBYnN0cmFjdFdvcmtlcjo6b25EZXN0cm95V29ya2Vy
KCkKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3IgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPyBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSA6IDApCi0gICAgICAgIGluc3BlY3Rvci0+
d2lsbERlc3Ryb3lXb3JrZXIoaWQoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBBYnN0cmFjdFdvcmtl
cjo6Y29udGV4dERlc3Ryb3llZCgpCi17Ci0gICAgb25EZXN0cm95V29ya2VyKCk7Ci0gICAgQWN0
aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7IAogfQogCiBLVVJMIEFic3RyYWN0V29y
a2VyOjpyZXNvbHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKSW5k
ZXg6IFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCShyZXZpc2lvbiA1NjE1MikKKysrIFdlYkNvcmUv
d29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxBYnN0cmFjdFdv
cmtlcj46OmRlcmVmOwogCiAgICAgICAgIGxvbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAgICAgICAgIEFic3Ry
YWN0V29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICAgICAgdmlydHVhbCB+QWJz
dHJhY3RXb3JrZXIoKTsKIApAQCAtNzEsNyArNzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAgICAg
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICAgICAg
dmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotICAgICAg
ICB2b2lkIG9uRGVzdHJveVdvcmtlcigpOwogICAgICAgICAKICAgICAgICAgRXZlbnRUYXJnZXRE
YXRhIG1fZXZlbnRUYXJnZXREYXRhOwogICAgICAgICBsb25nIG1faWQ7CkluZGV4OiBXZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAJKHJldmlzaW9uIDU2MTUyKQorKysgV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkVycm9yRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlci5oIgpAQCAtMTQxLDIz
ICsxNDIsMjkgQEAgcHJpdmF0ZToKIAogY2xhc3MgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s+IGNyZWF0ZShXb3JrZXJN
ZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgc3RhdGljIFBhc3NPd25QdHI8V29y
a2VyQ29udGV4dERlc3Ryb3llZFRhc2s+IGNyZWF0ZShXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVz
c2FnaW5nUHJveHksIGxvbmcgd29ya2VySWQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFdv
cmtlckNvbnRleHREZXN0cm95ZWRUYXNrKG1lc3NhZ2luZ1Byb3h5KTsKKyAgICAgICAgcmV0dXJu
IG5ldyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhtZXNzYWdpbmdQcm94eSwgd29ya2VySWQp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhXb3Jr
ZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgV29ya2VyQ29udGV4dERlc3Ry
b3llZFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBsb25nIHdvcmtl
cklkKQogICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCisgICAgICAg
ICwgbV93b3JrZXJJZCh3b3JrZXJJZCkKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAg
ICAgbV9tZXNzYWdpbmdQcm94eS0+d29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCk7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvciA9IGNvbnRleHQgPyBjb250ZXh0LT5pbnNwZWN0b3JDb250cm9sbGVyKCkgOiAwKQor
ICAgICAgICAgICAgaW5zcGVjdG9yLT53aWxsRGVzdHJveVdvcmtlcihtX3dvcmtlcklkKTsKKyNl
bmRpZgogICAgIH0KIAogICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5
OworICAgIGxvbmcgbV93b3JrZXJJZDsKIH07CiAKIGNsYXNzIFdvcmtlclRlcm1pbmF0ZVRhc2sg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CkBAIC0yMjQsNiArMjMxLDcg
QEAgV29ya2VyTWVzc2FnaW5nUHJveHk6Oldvcmtlck1lc3NhZ2luZ1BybwogICAgIEFTU0VSVCht
X3dvcmtlck9iamVjdCk7CiAgICAgQVNTRVJUKChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
RG9jdW1lbnQoKSAmJiBpc01haW5UaHJlYWQoKSkKICAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0
YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkp
LT50aHJlYWQoKS0+dGhyZWFkSUQoKSkpOworICAgIG1fd29ya2VySWQgPSB3b3JrZXJPYmplY3Qt
PmlkKCk7CiB9CiAKIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp+V29ya2VyTWVzc2FnaW5nUHJveHko
KQpAQCAtMzIwLDcgKzMyOCw3IEBAIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9i
amVjdEQKIAogdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29udGV4dERlc3Ryb3ll
ZCgpCiB7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhXb3JrZXJDb250
ZXh0RGVzdHJveWVkVGFzazo6Y3JlYXRlKHRoaXMpKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOjpjcmVhdGUodGhpcywg
bV93b3JrZXJJZCkpOwogICAgIC8vIFdpbGwgZXhlY3V0ZSB3b3JrZXJDb250ZXh0RGVzdHJveWVk
SW50ZXJuYWwoKSBvbiBjb250ZXh0J3MgdGhyZWFkLgogfQogCkluZGV4OiBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMv
V29ya2VyTWVzc2FnaW5nUHJveHkuaAkocmV2aXNpb24gNTYxNTIpCisrKyBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV93b3JrZXJUaHJlYWRIYWRQZW5k
aW5nQWN0aXZpdHk7IC8vIFRoZSBsYXRlc3QgY29uZmlybWF0aW9uIGZyb20gd29ya2VyIHRocmVh
ZCByZXBvcnRlZCB0aGF0IGl0IHdhcyBzdGlsbCBhY3RpdmUuCiAKICAgICAgICAgYm9vbCBtX2Fz
a2VkVG9UZXJtaW5hdGU7CisgICAgICAgIGxvbmcgbV93b3JrZXJJZDsKIAogICAgICAgICBWZWN0
b3I8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gbV9xdWV1ZWRFYXJseVRh
c2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhlcmUncyBhIHRocmVhZCBvYmpl
Y3QgY3JlYXRlZC4KICAgICB9OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1NjE1MikKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMC0wMy0xOCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc2VydGlvbiBm
YWlsdXJlIHdoZW4gaW5zcGVjdGluZyBhIHBhZ2Ugd2l0aCB3b3JrZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjIxMworICAgICAgICAqIHNyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50
SW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
Q2xpZW50SW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVkVGFzayk6CisgICAgICAgICogc3JjL1dl
YldvcmtlckNsaWVudEltcGwuaDoKKwogMjAxMC0wMy0xNyAgR2FycmV0IEtlbGx5ICA8Z2RrQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDU2
MTUyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw3IEBAIGJvb2wgV2ViV29ya2VyQ2xpZW50SW1wbDo6
aGFzUGVuZGluZ0FjdGkKIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3RE
ZXN0cm95ZWQoKQogeworICAgIGxvbmcgd29ya2VySWQgPSBtX3dvcmtlci0+aWQoKTsKICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpIHsKICAgICAgICAgbV93ZWJXb3JrZXItPndvcmtlck9iamVjdERl
c3Ryb3llZCgpOwogICAgICAgICBtX3dvcmtlciA9IDA7CkBAIC0yMDIsNyArMjAzLDggQEAgdm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3REZQogICAgIC8vIEV2ZW4gaWYgdGhp
cyBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLCB0aGVyZSBjb3VsZCBiZSBhIHF1ZXVlZCB0
YXNrIGZvcgogICAgIC8vIHRoaXMgb2JqZWN0LCBzbyBkb24ndCBkZWxldGUgaXQgcmlnaHQgYXdh
eS4KICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZ3b3JrZXJPYmplY3REZXN0cm95ZWRUYXNrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdvcmtlcklkKSk7CiB9CiAKIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCkBA
IC0zMzcsMTEgKzMzOSwxNiBAQCB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdl
VG9XCiAgICAgdGhpc1B0ci0+bV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0
KG1lc3NhZ2UsIHdlYkNoYW5uZWxzKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3
b3JrZXJPYmplY3REZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
V29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cikKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29y
a2VyT2JqZWN0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGll
bnRJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgd29ya2VySWQpCiB7CiAgICAgaWYgKHRoaXNQdHItPm1fd29ya2Vy
KSAvLyBDaGVjayB3ZSBoYXZlbid0IGFscmVhZCBjYWxsZWQgdGhpcy4KICAgICAgICAgdGhpc1B0
ci0+bV93ZWJXb3JrZXItPndvcmtlck9iamVjdERlc3Ryb3llZCgpOworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHRoaXNQdHIt
Pm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAg
ICBpbnNwZWN0b3ItPndpbGxEZXN0cm95V29ya2VyKHdvcmtlcklkKTsKKyNlbmRpZgogICAgIGRl
bGV0ZSB0aGlzUHRyOwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNs
aWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNs
aWVudEltcGwuaAkocmV2aXNpb24gNTYxNTIpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYldv
cmtlckNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4gY2hhbm5lbHMpOwogICAgIHN0YXRpYyB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZFRh
c2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQ
dHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2Vy
Q2xpZW50SW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgd29ya2VySWQpOwogCiAgICAgLy8gVGhlc2UgdGFza3MgYXJlIGRpc3BhdGNo
ZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHdvcmtlciAoaS5lLgogICAgIC8vIG1h
aW4gV2ViS2l0IHRocmVhZCBpbiByZW5kZXJlciBwcm9jZXNzLCBhbmQgdGhlIHdvcmtlciB0aHJl
YWQgaW4gdGhlCg==
</data>
<flag name="review"
          id="34206"
          type_id="1"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51283</attachid>
            <date>2010-03-22 07:41:44 -0700</date>
            <delta_ts>2010-03-23 06:55:22 -0700</delta_ts>
            <desc>Send worker creation/destruction notifications to inspector frontend asynchronously</desc>
            <filename>workers-assert-patch</filename>
            <type>text/plain</type>
            <size>14974</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjMzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDMtMjIgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2Ugbm90aWZpY2F0aW9uIHNlbnQgdG8gaW5zcGVjdG9yIGZyb250ZW5kIG9uIHdvcmtl
cnMgY3JlYXRpb24gLyBkZXN0cnVjdGlvbgorICAgICAgICB0byBiZSBwb3N0ZWQgYXN5bmNocm9u
b3VzbHkgdG8gYXZvaWQgSlMgcmVlbnRlcmFiaWxpdHkgcHJvYmxlbXMuIEFsc28sIHJlbmFtZWQK
KyAgICAgICAgd2lsbERlc3Ryb3lXb3JrZXIgdG8gZGlkRGVzdHJveVdvcmtlciB0byByZWZsZWN0
IHRoYXQgaXQgZ2V0cyBjYWxsZWQgbGF0ZXIgYW5kIGdvdAorICAgICAgICByaWQgb2YgZXhwbGlj
aXQgSURzIGZvciB3b3JrZXJzICh1c2UgYWRkcmVzc2VzIGluc3RlYWQpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyMTMKKworICAgICAgICAqIGlu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHRIb3N0OjpkaWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRU
YXNrOjpQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3N0V29ya2VyTm90aWZp
Y2F0aW9uVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRGVzdHJveVdvcmtlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZERlc3Ryb3lXb3JrZXIpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
V29ya2VyUmVzb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3Jr
ZXJSZXNvdXJjZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyUmVzb3Vy
Y2U6Okluc3BlY3RvcldvcmtlclJlc291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkRmFrZVdvcmtlci5qczoKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5G
YWtlV29ya2VyLnByb3RvdHlwZS50ZXJtaW5hdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvV29ya2Vyc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmRpZERl
c3Ryb3lXb3JrZXIpOgorICAgICAgICAqIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXb3JrZXI6OkFic3RyYWN0V29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0V29ya2VyOjpvbkRlc3Ryb3lXb3JrZXIpOgorICAgICAgICAqIHdv
cmtlcnMvQWJzdHJhY3RXb3JrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V29ya2Vy
Ojphc0lEKToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcik6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpXb3JrZXIpOgorCiAyMDEwLTAz
LTIyICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDU2MzI1KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDEwICsyMTMsMTAgQEAg
dm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZENyZWF0ZVdvcmtlcgogICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcik7
CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3aWxsRGVzdHJveVdvcmtlcihsb25nIGlk
KQordm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZERlc3Ryb3lXb3JrZXIobG9uZyBpZCkKIHsK
ICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPndpbGxEZXN0cm95V29ya2VyKGlkKTsKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kaWREZXN0cm95V29ya2VyKGlkKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
IApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlzaW9uIDU2
MzI1KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXT1JLRVJTKQogICAg
IGxvbmcgbmV4dFdvcmtlcklkKCk7CiAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIobG9uZyBpZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lXb3JrZXIobG9uZyBpZCk7CisgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGxvbmcgaWQp
OwogI2VuZGlmCiAgICAgdm9pZCByZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9u
ZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhjZXB0aW9u
KTsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCShyZXZp
c2lvbiA1NjMyNSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbW9kdWxlIGNvcmUgewogCiAjaWYgZGVm
aW5lZChFTkFCTEVfV09SS0VSUykgJiYgRU5BQkxFX1dPUktFUlMKICAgICAgICAgdm9pZCBkaWRD
cmVhdGVXb3JrZXIoaW4gbG9uZyBpZCwgaW4gRE9NU3RyaW5nIHVybCwgaW4gYm9vbGVhbiBpc0Zh
a2VXb3JrZXIpOwotICAgICAgICB2b2lkIHdpbGxEZXN0cm95V29ya2VyKGluIGxvbmcgaWQpOwor
ICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW4gbG9uZyBpZCk7CiAgICAgICAgIGxvbmcg
bmV4dFdvcmtlcklkKCk7CiAjZW5kaWYKICAgICAgICAgW0N1c3RvbV0gdm9pZCByZXBvcnREaWRE
aXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIERPTU9iamVjdCByZXN1
bHQsIGluIGJvb2xlYW4gaXNFeGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDU2MzI1KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcsMTggKzEw
NTcsNTMgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcgogfQogCiAj
aWYgRU5BQkxFKFdPUktFUlMpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVdv
cmtlcihsb25nIGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKK2Ns
YXNzIFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQ
b3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s+IGNyZWF0ZShSZWZQdHI8SW5zcGVj
dG9yV29ya2VyUmVzb3VyY2U+IHdvcmtlciwgYm9vbCBpc0NyZWF0ZWQpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayh3b3JrZXIs
IGlzQ3JlYXRlZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFBvc3RXb3JrZXJOb3RpZmljYXRp
b25Ub0Zyb250ZW5kVGFzayhSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IHdvcmtlciwg
Ym9vbCBpc0NyZWF0ZWQpCisgICAgICAgIDogbV93b3JrZXIod29ya2VyKQorICAgICAgICAsIG1f
aXNDcmVhdGVkKGlzQ3JlYXRlZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCisgICAgewor
ICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0Q29udGV4
dC0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAgICAgICAgaW5zcGVjdG9yLT5wb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChtX3dvcmtlciwgbV9pc0NyZWF0ZWQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IG1fd29ya2Vy
OworICAgIGJvb2wgbV9pc0NyZWF0ZWQ7Cit9OworCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKFJlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gd29ya2VyLCBib29sIGlzQ3JlYXRlZCkKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNDcmVhdGVkKQorICAgICAgICBtX2Zyb250ZW5k
LT5kaWRDcmVhdGVXb3JrZXIoKndvcmtlcik7CisgICAgZWxzZQorICAgICAgICBtX2Zyb250ZW5k
LT5kaWREZXN0cm95V29ya2VyKCp3b3JrZXIpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZENyZWF0ZVdvcmtlcihpbnRwdHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wg
aXNTaGFyZWRXb3JrZXIpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gd29ya2VyUmVzb3VyY2UoSW5z
cGVjdG9yV29ya2VyUmVzb3VyY2U6OmNyZWF0ZShpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcikpOwog
ICAgIG1fd29ya2Vycy5zZXQoaWQsIHdvcmtlclJlc291cmNlKTsKLSAgICBpZiAobV9mcm9udGVu
ZCkKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29ya2VyKCp3b3JrZXJSZXNvdXJjZSk7
CisgICAgaWYgKG1faW5zcGVjdGVkUGFnZSAmJiBtX2Zyb250ZW5kKQorICAgICAgICBtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5wb3N0VGFzayhQb3N0V29ya2VyTm90
aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s6OmNyZWF0ZSh3b3JrZXJSZXNvdXJjZSwgdHJ1ZSkpOwog
fQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxEZXN0cm95V29ya2VyKGxvbmcgaWQp
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZERlc3Ryb3lXb3JrZXIoaW50cHRyX3QgaWQp
CiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNzYsOCArMTEx
MSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbERlc3Ryb3lXb3IKICAgICBXb3Jr
ZXJzTWFwOjppdGVyYXRvciB3b3JrZXJSZXNvdXJjZSA9IG1fd29ya2Vycy5maW5kKGlkKTsKICAg
ICBpZiAod29ya2VyUmVzb3VyY2UgPT0gbV93b3JrZXJzLmVuZCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPndpbGxEZXN0cm95V29y
a2VyKCp3b3JrZXJSZXNvdXJjZS0+c2Vjb25kKTsKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlICYm
IG1fZnJvbnRlbmQpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3Vt
ZW50KCktPnBvc3RUYXNrKFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6Y3Jl
YXRlKHdvcmtlclJlc291cmNlLT5zZWNvbmQsIGZhbHNlKSk7CiAgICAgbV93b3JrZXJzLnJlbW92
ZSh3b3JrZXJSZXNvdXJjZSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA1NjMyNSkKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgzLDggKzE4Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9k
ZSopOwogICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50Kik7CiAjaWYgRU5BQkxFKFdP
UktFUlMpCi0gICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIobG9uZyBpZCwgY29uc3QgU3RyaW5nJiB1
cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpOwotICAgIHZvaWQgd2lsbERlc3Ryb3lXb3JrZXIobG9u
ZyBpZCk7CisgICAgdm9pZCBwb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChSZWZQdHI8
SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IHdvcmtlciwgYm9vbCBpc0NyZWF0ZWQpOworICAgIHZv
aWQgZGlkQ3JlYXRlV29ya2VyKGludHB0cl90LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1No
YXJlZFdvcmtlcik7CisgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludHB0cl90KTsKICNlbmRp
ZgogICAgIHZvaWQgZ2V0Q29va2llcyhsb25nIGNhbGxJZCk7CiAKQEAgLTM2MSw3ICszNjIsNyBA
QCBwcml2YXRlOgogICAgIFByb2ZpbGVzTWFwIG1fcHJvZmlsZXM7CiAjZW5kaWYKICNpZiBFTkFC
TEUoV09SS0VSUykKLSAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPEluc3BlY3Rvcldv
cmtlclJlc291cmNlPiA+IFdvcmtlcnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludHB0cl90
LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vyc01hcDsKIAogICAgIFdv
cmtlcnNNYXAgbV93b3JrZXJzOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwCShyZXZpc2lvbiA1NjMyNSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDEwICs2MDIsMTAgQEAg
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ3JlYXRlV29ya2VyKAogICAgIGZ1bmN0aW9uLmNh
bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6d2lsbERlc3Ryb3lXb3JrZXIoY29u
c3QgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmIHdvcmtlcikKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmRpZERlc3Ryb3lXb3JrZXIoY29uc3QgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmIHdvcmtl
cikKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgid2lsbERlc3Ryb3lXb3Jr
ZXIiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkRGVzdHJveVdvcmtlciIpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHdvcmtlci5pZCgpKTsKICAgICBmdW5jdGlvbi5j
YWxsKCk7CiB9CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgJKHJldmlz
aW9uIDU2MzI1KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
IEVOQUJMRShXT1JLRVJTKQogICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihjb25zdCBJbnNw
ZWN0b3JXb3JrZXJSZXNvdXJjZSYpOwotICAgICAgICB2b2lkIHdpbGxEZXN0cm95V29ya2VyKGNv
bnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJik7CisgICAgICAgIHZvaWQgZGlkRGVzdHJveVdv
cmtlcihjb25zdCBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSYpOwogI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVIpCiAKICAgICAgICAgdm9pZCBkaWRHZXRDb29raWVzKGludCBjYWxsSWQsIGNvbnN0IFNj
cmlwdEFycmF5JiBjb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZXNTdHJpbmcpOwpJbmRleDog
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oCShyZXZpc2lvbiA1
NjMyNSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDIzICs0MiwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEluc3BlY3RvcldvcmtlclJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9y
V29ya2VyUmVzb3VyY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZT4gY3JlYXRlKGxvbmcgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29s
IGlzU2hhcmVkV29ya2VyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvcldvcmtlclJl
c291cmNlPiBjcmVhdGUoaW50cHRyX3QgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hh
cmVkV29ya2VyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZShpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcikpOwogICAgIH0KIAotICAgIGxv
bmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgaW50cHRyX3QgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CiAgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQogICAgIGJvb2wgaXNTaGFyZWRXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2hh
cmVkV29ya2VyOyB9CiBwcml2YXRlOgotICAgIEluc3BlY3RvcldvcmtlclJlc291cmNlKGxvbmcg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKQorICAgIEluc3BlY3Rv
cldvcmtlclJlc291cmNlKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1No
YXJlZFdvcmtlcikKICAgICAgICAgOiBtX2lkKGlkKQogICAgICAgICAsIG1fdXJsKHVybCkKICAg
ICAgICAgLCBtX2lzU2hhcmVkV29ya2VyKGlzU2hhcmVkV29ya2VyKQogICAgIHsKICAgICB9CiAK
LSAgICBpbnQgbV9pZDsKKyAgICBpbnRwdHJfdCBtX2lkOwogICAgIFN0cmluZyBtX3VybDsKICAg
ICBib29sIG1faXNTaGFyZWRXb3JrZXI7CiB9OwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luamVjdGVkRmFrZVdvcmtlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2VyLmpzCShyZXZpc2lvbiA1NjMyNSkKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZha2VXb3JrZXIuanMJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgRmFrZVdvcmtlci5wcm90b3R5cGUgPSB7CiAKICAg
ICB0ZXJtaW5hdGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIEluamVjdGVkU2NyaXB0SG9z
dC53aWxsRGVzdHJveVdvcmtlcih0aGlzLl9pZCk7CisgICAgICAgIEluamVjdGVkU2NyaXB0SG9z
dC5kaWREZXN0cm95V29ya2VyKHRoaXMuX2lkKTsKIAogICAgICAgICBpZiAodGhpcy5fZnJhbWUg
IT0gbnVsbCkgewogICAgICAgICAgICAgdGhpcy5fZnJhbWUub25tZXNzYWdlID0gdGhpcy5fd29y
a2VyLm9ubWVzc2FnZSA9IG5vb3A7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V29ya2Vyc1NpZGViYXJQYW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Xb3JrZXJzU2lkZWJhclBhbmUuanMJKHJldmlzaW9uIDU2MzI1KQorKysgV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dvcmtlcnNTaWRlYmFyUGFuZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFdlYkluc3BlY3Rvci5kaWRDcmVhdGVXb3JrZXIgPSBmdW5j
dGlvbigKICAgICB3b3JrZXJzUGFuZS5hZGRXb3JrZXIuYXBwbHkod29ya2Vyc1BhbmUsIGFyZ3Vt
ZW50cyk7CiB9CiAKLVdlYkluc3BlY3Rvci53aWxsRGVzdHJveVdvcmtlciA9IGZ1bmN0aW9uKCkK
K1dlYkluc3BlY3Rvci5kaWREZXN0cm95V29ya2VyID0gZnVuY3Rpb24oKQogewogICAgIHZhciB3
b3JrZXJzUGFuZSA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5zaWRlYmFyUGFuZXMud29y
a2VyczsKICAgICB3b3JrZXJzUGFuZS5yZW1vdmVXb3JrZXIuYXBwbHkod29ya2Vyc1BhbmUsIGFy
Z3VtZW50cyk7CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAJKHJldmlzaW9uIDU2
MzI5KQorKysgV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQsMTEgKzQ0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1sb25nIEFic3Ry
YWN0V29ya2VyOjpzX2xhc3RJZDsKLQogQWJzdHJhY3RXb3JrZXI6OkFic3RyYWN0V29ya2VyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29u
dGV4dCwgdGhpcykKLSAgICAsIG1faWQoKytzX2xhc3RJZCkKIHsKIH0KIApAQCAtNjEsNyArNTgs
NyBAQCB2b2lkIEFic3RyYWN0V29ya2VyOjpvbkRlc3Ryb3lXb3JrZXIoKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA/IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpIDogMCkKLSAgICAgICAgaW5zcGVjdG9yLT53aWxsRGVzdHJveVdvcmtl
cihpZCgpKTsKKyAgICAgICAgaW5zcGVjdG9yLT5kaWREZXN0cm95V29ya2VyKGFzSUQoKSk7CiAj
ZW5kaWYKIH0KIApJbmRleDogV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgJKHJldmlzaW9uIDU2MzI5
KQorKysgV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1c2luZyBSZWZDb3Vu
dGVkPEFic3RyYWN0V29ya2VyPjo6cmVmOwogICAgICAgICB1c2luZyBSZWZDb3VudGVkPEFic3Ry
YWN0V29ya2VyPjo6ZGVyZWY7CiAKLSAgICAgICAgbG9uZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWQ7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICAgICAg
QWJzdHJhY3RXb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgICAgICB2aXJ0dWFs
IH5BYnN0cmFjdFdvcmtlcigpOwpAQCAtNjUsNiArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjb252ZXJ0
cyBhIFVSTCB0byBhbiBhYnNvbHV0ZSBVUkwgYW5kIGNoZWNrcyB0aGUgcmVzdWx0IGZvciB2YWxp
ZGl0eS4KICAgICAgICAgS1VSTCByZXNvbHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRp
b25Db2RlJiBlYyk7CisgICAgICAgIGludHB0cl90IGFzSUQoKSBjb25zdCB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQpAQCAtNzQsOSArNzQsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgb25EZXN0cm95V29ya2VyKCk7CiAg
ICAgICAgIAogICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci0gICAg
ICAgIGxvbmcgbV9pZDsKLQotICAgICAgICBzdGF0aWMgbG9uZyBzX2xhc3RJZDsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29y
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAko
cmV2aXNpb24gNTYzMjkpCisrKyBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcihj
b25zdCBTdHJpbmcmCiAgICAgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29ubmVjdCh0aGlzLCBy
ZW1vdGVQb3J0LnJlbGVhc2UoKSwgc2NyaXB0VXJsLCBuYW1lLCBlYyk7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgIGluc3Bl
Y3Rvci0+ZGlkQ3JlYXRlV29ya2VyKGlkKCksIHNjcmlwdFVybC5zdHJpbmcoKSwgdHJ1ZSk7Cisg
ICAgICAgIGluc3BlY3Rvci0+ZGlkQ3JlYXRlV29ya2VyKGFzSUQoKSwgc2NyaXB0VXJsLnN0cmlu
ZygpLCB0cnVlKTsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkocmV2aXNpb24gNTYz
MjkpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBXb3JrZXI6Oldvcmtlcihjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0CiAgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90
IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBv
YmplY3QgaXMgbm90IGNvbGxlY3RlZCwgYXMgd2VsbCBhcyBpdHMgZXZlbnQgbGlzdGVuZXJzLgog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvciA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQot
ICAgICAgICBpbnNwZWN0b3ItPmRpZENyZWF0ZVdvcmtlcihpZCgpLCBzY3JpcHRVUkwuc3RyaW5n
KCksIGZhbHNlKTsKKyAgICAgICAgaW5zcGVjdG9yLT5kaWRDcmVhdGVXb3JrZXIoYXNJRCgpLCBz
Y3JpcHRVUkwuc3RyaW5nKCksIGZhbHNlKTsKICNlbmRpZgogfQogCg==
</data>
<flag name="review"
          id="34514"
          type_id="1"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51421</attachid>
            <date>2010-03-23 06:55:22 -0700</date>
            <delta_ts>2010-03-23 10:57:01 -0700</delta_ts>
            <desc>Send worker creation/destruction notifications to inspector frontend asynchronously</desc>
            <filename>workers-assert-patch</filename>
            <type>text/plain</type>
            <size>15419</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjM4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDMtMjMgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2Ugbm90aWZpY2F0aW9uIHNlbnQgdG8gaW5zcGVjdG9yIGZyb250ZW5kIG9uIHdvcmtl
cnMgY3JlYXRpb24gLyBkZXN0cnVjdGlvbgorICAgICAgICB0byBiZSBwb3N0ZWQgYXN5bmNocm9u
b3VzbHkgdG8gYXZvaWQgSlMgcmVlbnRlcmFiaWxpdHkgcHJvYmxlbXMuIEFsc28sIHJlbmFtZWQK
KyAgICAgICAgd2lsbERlc3Ryb3lXb3JrZXIgdG8gZGlkRGVzdHJveVdvcmtlciB0byByZWZsZWN0
IHRoYXQgaXQgZ2V0cyBjYWxsZWQgbGF0ZXIgYW5kIGdvdAorICAgICAgICByaWQgb2YgZXhwbGlj
aXQgSURzIGZvciB3b3JrZXJzICh1c2UgYWRkcmVzc2VzIGluc3RlYWQpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyMTMKKworICAgICAgICAqIGlu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHRIb3N0OjpkaWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRU
YXNrOjpQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3N0V29ya2VyTm90aWZp
Y2F0aW9uVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRGVzdHJveVdvcmtlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Oik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kOjpkaWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29y
a2VyUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlclJlc291cmNl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U6Omlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlclJlc291cmNlOjpJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZh
a2VXb3JrZXIuanM6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90
b3R5cGUudGVybWluYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dvcmtlcnNT
aWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaWREZXN0cm95V29ya2VyKToK
KyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0V29ya2VyOjpBYnN0cmFjdFdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdFdvcmtlcjo6b25EZXN0cm95V29ya2VyKToKKyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0
V29ya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdvcmtlcjo6YXNJRCk6CisgICAg
ICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
V29ya2VyOjpTaGFyZWRXb3JrZXIpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6V29ya2VyKToKKwogMjAxMC0wMy0yMyAgR3VzdGF2byBO
b3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDU2Mzg0KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDEwICsyMTMs
MTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZENyZWF0ZVdvcmtlcgogICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdv
cmtlcik7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3aWxsRGVzdHJveVdvcmtlcihs
b25nIGlkKQordm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZERlc3Ryb3lXb3JrZXIobG9uZyBp
ZCkKIHsKICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPndpbGxEZXN0cm95V29ya2VyKGlkKTsKKyAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kaWREZXN0cm95V29ya2VyKGlkKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV09S
S0VSUykKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlz
aW9uIDU2Mzg0KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXT1JLRVJT
KQogICAgIGxvbmcgbmV4dFdvcmtlcklkKCk7CiAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIobG9u
ZyBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpOwotICAgIHZvaWQg
d2lsbERlc3Ryb3lXb3JrZXIobG9uZyBpZCk7CisgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGxv
bmcgaWQpOwogI2VuZGlmCiAgICAgdm9pZCByZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3Jp
cHQobG9uZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhj
ZXB0aW9uKTsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRs
CShyZXZpc2lvbiA1NjM4NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbW9kdWxlIGNvcmUgewogCiAj
aWYgZGVmaW5lZChFTkFCTEVfV09SS0VSUykgJiYgRU5BQkxFX1dPUktFUlMKICAgICAgICAgdm9p
ZCBkaWRDcmVhdGVXb3JrZXIoaW4gbG9uZyBpZCwgaW4gRE9NU3RyaW5nIHVybCwgaW4gYm9vbGVh
biBpc0Zha2VXb3JrZXIpOwotICAgICAgICB2b2lkIHdpbGxEZXN0cm95V29ya2VyKGluIGxvbmcg
aWQpOworICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW4gbG9uZyBpZCk7CiAgICAgICAg
IGxvbmcgbmV4dFdvcmtlcklkKCk7CiAjZW5kaWYKICAgICAgICAgW0N1c3RvbV0gdm9pZCByZXBv
cnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIERPTU9iamVj
dCByZXN1bHQsIGluIGJvb2xlYW4gaXNFeGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDU2Mzg0KQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcs
MTggKzEwNTcsNTkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcgog
fQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENy
ZWF0ZVdvcmtlcihsb25nIGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtl
cikKK2NsYXNzIFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayA6IHB1YmxpYyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckFjdGlvbiBhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBvc3RXb3Jr
ZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayh3b3JrZXIsIGFjdGlvbik7CisgICAgfQorCitw
cml2YXRlOgorICAgIFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayhQYXNzUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckFjdGlvbiBhY3Rpb24pCisgICAgICAgIDogbV93b3JrZXIod29ya2VyKQorICAgICAg
ICAsIG1fYWN0aW9uKGFjdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCisgICAgewor
ICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0Q29udGV4
dC0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAgICAgICAgaW5zcGVjdG9yLT5wb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiBtX3dvcmtlcjsK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24gbV9hY3Rpb247Cit9OworCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5k
KGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xs
ZXI6OldvcmtlckFjdGlvbiBhY3Rpb24pCit7CisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAgICAg
ICByZXR1cm47CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICBjYXNlIEluc3BlY3RvckNvbnRy
b2xsZXI6OldvcmtlckNyZWF0ZWQ6CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENyZWF0ZVdvcmtl
cih3b3JrZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckRlc3Ryb3llZDoKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkRGVzdHJveVdvcmtlcih3
b3JrZXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3Jl
YXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdv
cmtlcikKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXJSZXNvdXJjZShJbnNwZWN0b3JXb3Jr
ZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKSk7CiAgICAgbV93b3Jr
ZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOwotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAg
ICBtX2Zyb250ZW5kLT5kaWRDcmVhdGVXb3JrZXIoKndvcmtlclJlc291cmNlKTsKKyAgICBpZiAo
bV9pbnNwZWN0ZWRQYWdlICYmIG1fZnJvbnRlbmQpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnBvc3RUYXNrKFBvc3RXb3JrZXJOb3RpZmljYXRpb25U
b0Zyb250ZW5kVGFzazo6Y3JlYXRlKHdvcmtlclJlc291cmNlLCBJbnNwZWN0b3JDb250cm9sbGVy
OjpXb3JrZXJDcmVhdGVkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbERl
c3Ryb3lXb3JrZXIobG9uZyBpZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJv
eVdvcmtlcihpbnRwdHJfdCBpZCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTA3Niw4ICsxMTE3LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxs
RGVzdHJveVdvcgogICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlclJlc291cmNlID0gbV93
b3JrZXJzLmZpbmQoaWQpOwogICAgIGlmICh3b3JrZXJSZXNvdXJjZSA9PSBtX3dvcmtlcnMuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9u
dGVuZC0+d2lsbERlc3Ryb3lXb3JrZXIoKndvcmtlclJlc291cmNlLT5zZWNvbmQpOworICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlmaWNhdGlv
blRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UtPnNlY29uZCwgSW5zcGVjdG9y
Q29udHJvbGxlcjo6V29ya2VyRGVzdHJveWVkKSk7CiAgICAgbV93b3JrZXJzLnJlbW92ZSh3b3Jr
ZXJSZXNvdXJjZSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA1NjM4NCkKKysrIFdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTgz
LDggKzE4MywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUqKTsK
ICAgICB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopOwogI2lmIEVOQUJMRShXT1JLRVJT
KQotICAgIHZvaWQgZGlkQ3JlYXRlV29ya2VyKGxvbmcgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBi
b29sIGlzU2hhcmVkV29ya2VyKTsKLSAgICB2b2lkIHdpbGxEZXN0cm95V29ya2VyKGxvbmcgaWQp
OworICAgIGVudW0gV29ya2VyQWN0aW9uIHsgV29ya2VyQ3JlYXRlZCwgV29ya2VyRGVzdHJveWVk
IH07CisKKyAgICB2b2lkIHBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKGNvbnN0IElu
c3BlY3RvcldvcmtlclJlc291cmNlJiwgV29ya2VyQWN0aW9uKTsKKyAgICB2b2lkIGRpZENyZWF0
ZVdvcmtlcihpbnRwdHJfdCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIp
OworICAgIHZvaWQgZGlkRGVzdHJveVdvcmtlcihpbnRwdHJfdCk7CiAjZW5kaWYKICAgICB2b2lk
IGdldENvb2tpZXMobG9uZyBjYWxsSWQpOwogCkBAIC0zNjEsNyArMzY0LDcgQEAgcHJpdmF0ZToK
ICAgICBQcm9maWxlc01hcCBtX3Byb2ZpbGVzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMp
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJj
ZT4gPiBXb3JrZXJzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgUmVmUHRyPElu
c3BlY3RvcldvcmtlclJlc291cmNlPiA+IFdvcmtlcnNNYXA7CiAKICAgICBXb3JrZXJzTWFwIG1f
d29ya2VyczsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmNwcAkocmV2aXNpb24gNTYzODQpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiwxMCArNjAyLDEwIEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZENyZWF0ZVdvcmtlcigKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OndpbGxEZXN0cm95V29ya2VyKGNvbnN0IEluc3BlY3Rv
cldvcmtlclJlc291cmNlJiB3b3JrZXIpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWREZXN0
cm95V29ya2VyKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIpCiB7CiAgICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsg
Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoIndpbGxEZXN0cm95V29ya2VyIik7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZERlc3Ryb3lXb3JrZXIiKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCh3b3JrZXIuaWQoKSk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQpJ
bmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCShyZXZpc2lvbiA1NjM4NCkK
KysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1MCw3ICsxNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoV09S
S0VSUykKICAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoY29uc3QgSW5zcGVjdG9yV29ya2Vy
UmVzb3VyY2UmKTsKLSAgICAgICAgdm9pZCB3aWxsRGVzdHJveVdvcmtlcihjb25zdCBJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZSYpOworICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3JrZXIoY29uc3Qg
SW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmKTsKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSKQogCiAg
ICAgICAgIHZvaWQgZGlkR2V0Q29va2llcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYg
Y29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVzU3RyaW5nKTsKSW5kZXg6IFdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaAkocmV2aXNpb24gNTYzODQpCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwyMyArNDIsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvcldvcmtlclJlc291
cmNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVz
b3VyY2U+IGNyZWF0ZShsb25nIGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdv
cmtlcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gY3Jl
YXRlKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yV29ya2VyUmVzb3Vy
Y2UoaWQsIHVybCwgaXNTaGFyZWRXb3JrZXIpKTsKICAgICB9CiAKLSAgICBsb25nIGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGludHB0cl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQogICAgIGNvbnN0IFN0cmluZyYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KICAg
ICBib29sIGlzU2hhcmVkV29ya2VyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NoYXJlZFdvcmtlcjsg
fQogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZShsb25nIGlkLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKKyAgICBJbnNwZWN0b3JXb3JrZXJSZXNv
dXJjZShpbnRwdHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIp
CiAgICAgICAgIDogbV9pZChpZCkKICAgICAgICAgLCBtX3VybCh1cmwpCiAgICAgICAgICwgbV9p
c1NoYXJlZFdvcmtlcihpc1NoYXJlZFdvcmtlcikKICAgICB7CiAgICAgfQogCi0gICAgaW50IG1f
aWQ7CisgICAgaW50cHRyX3QgbV9pZDsKICAgICBTdHJpbmcgbV91cmw7CiAgICAgYm9vbCBtX2lz
U2hhcmVkV29ya2VyOwogfTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZEZha2VXb3JrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkRmFrZVdvcmtlci5qcwkocmV2aXNpb24gNTYzODQpCisrKyBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2VyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw3ICs2Nyw3IEBAIEZha2VXb3JrZXIucHJvdG90eXBlID0gewogCiAgICAgdGVybWluYXRl
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qud2lsbERlc3Ry
b3lXb3JrZXIodGhpcy5faWQpOworICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QuZGlkRGVzdHJv
eVdvcmtlcih0aGlzLl9pZCk7CiAKICAgICAgICAgaWYgKHRoaXMuX2ZyYW1lICE9IG51bGwpIHsK
ICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubWVzc2FnZSA9IHRoaXMuX3dvcmtlci5vbm1lc3Nh
Z2UgPSBub29wOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dvcmtlcnNTaWRl
YmFyUGFuZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV29y
a2Vyc1NpZGViYXJQYW5lLmpzCShyZXZpc2lvbiA1NjM4NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Xb3JrZXJzU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3
ICsxMDcsNyBAQCBXZWJJbnNwZWN0b3IuZGlkQ3JlYXRlV29ya2VyID0gZnVuY3Rpb24oCiAgICAg
d29ya2Vyc1BhbmUuYWRkV29ya2VyLmFwcGx5KHdvcmtlcnNQYW5lLCBhcmd1bWVudHMpOwogfQog
Ci1XZWJJbnNwZWN0b3Iud2lsbERlc3Ryb3lXb3JrZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0
b3IuZGlkRGVzdHJveVdvcmtlciA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgd29ya2Vyc1BhbmUg
PSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuc2lkZWJhclBhbmVzLndvcmtlcnM7CiAgICAg
d29ya2Vyc1BhbmUucmVtb3ZlV29ya2VyLmFwcGx5KHdvcmtlcnNQYW5lLCBhcmd1bWVudHMpOwpJ
bmRleDogV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCShyZXZpc2lvbiA1NjM4NCkKKysrIFdl
YkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEx
ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbG9uZyBBYnN0cmFjdFdvcmtlcjo6
c19sYXN0SWQ7Ci0KIEFic3RyYWN0V29ya2VyOjpBYnN0cmFjdFdvcmtlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMp
Ci0gICAgLCBtX2lkKCsrc19sYXN0SWQpCiB7CiB9CiAKQEAgLTYxLDcgKzU4LDcgQEAgdm9pZCBB
YnN0cmFjdFdvcmtlcjo6b25EZXN0cm95V29ya2VyKCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgPyBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKSA6IDApCi0gICAgICAgIGluc3BlY3Rvci0+d2lsbERlc3Ryb3lXb3JrZXIoaWQoKSk7Cisg
ICAgICAgIGluc3BlY3Rvci0+ZGlkRGVzdHJveVdvcmtlcihhc0lEKCkpOwogI2VuZGlmCiB9CiAK
SW5kZXg6IFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCShyZXZpc2lvbiA1NjM4NCkKKysrIFdlYkNv
cmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxBYnN0cmFj
dFdvcmtlcj46OnJlZjsKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxBYnN0cmFjdFdvcmtlcj46
OmRlcmVmOwogCi0gICAgICAgIGxvbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAgICAgICAgIEFic3RyYWN0V29y
a2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICAgICAgdmlydHVhbCB+QWJzdHJhY3RX
b3JrZXIoKTsKQEAgLTY1LDYgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgYSBVUkwgdG8g
YW4gYWJzb2x1dGUgVVJMIGFuZCBjaGVja3MgdGhlIHJlc3VsdCBmb3IgdmFsaWRpdHkuCiAgICAg
ICAgIEtVUkwgcmVzb2x2ZVVSTChjb25zdCBTdHJpbmcmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMp
OworICAgICAgICBpbnRwdHJfdCBhc0lEKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4odGhpcyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KQEAgLTc0LDkgKzc0LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIG9uRGVzdHJveVdvcmtlcigpOwogICAgICAgICAKICAg
ICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwotICAgICAgICBsb25nIG1f
aWQ7Ci0KLSAgICAgICAgc3RhdGljIGxvbmcgc19sYXN0SWQ7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAJKHJldmlzaW9uIDU2
Mzg0KQorKysgV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgU2hhcmVkV29ya2VyOjpTaGFyZWRXb3JrZXIoY29uc3QgU3RyaW5n
JgogICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3QodGhpcywgcmVtb3RlUG9ydC5y
ZWxlYXNlKCksIHNjcmlwdFVybCwgbmFtZSwgZWMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICBpbnNwZWN0b3ItPmRpZENy
ZWF0ZVdvcmtlcihpZCgpLCBzY3JpcHRVcmwuc3RyaW5nKCksIHRydWUpOworICAgICAgICBpbnNw
ZWN0b3ItPmRpZENyZWF0ZVdvcmtlcihhc0lEKCksIHNjcmlwdFVybC5zdHJpbmcoKSwgdHJ1ZSk7
CiAjZW5kaWYKIH0KIApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHJldmlzaW9uIDU2Mzg0KQorKysgV2Vi
Q29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAg
V29ya2VyOjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdAogICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGls
ZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5v
dCBjb2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxpc3RlbmVycy4KICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgaW5z
cGVjdG9yLT5kaWRDcmVhdGVXb3JrZXIoaWQoKSwgc2NyaXB0VVJMLnN0cmluZygpLCBmYWxzZSk7
CisgICAgICAgIGluc3BlY3Rvci0+ZGlkQ3JlYXRlV29ya2VyKGFzSUQoKSwgc2NyaXB0VVJMLnN0
cmluZygpLCBmYWxzZSk7CiAjZW5kaWYKIH0KIAo=
</data>
<flag name="review"
          id="34658"
          type_id="1"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51437</attachid>
            <date>2010-03-23 10:57:01 -0700</date>
            <delta_ts>2010-03-23 11:49:53 -0700</delta_ts>
            <desc>Send worker creation/destruction notifications to inspector frontend asynchronously</desc>
            <filename>workers-assert-patch</filename>
            <type>text/plain</type>
            <size>15374</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjM4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDMtMjMgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2Ugbm90aWZpY2F0aW9uIHNlbnQgdG8gaW5zcGVjdG9yIGZyb250ZW5kIG9uIHdvcmtl
cnMgY3JlYXRpb24gLyBkZXN0cnVjdGlvbgorICAgICAgICB0byBiZSBwb3N0ZWQgYXN5bmNocm9u
b3VzbHkgdG8gYXZvaWQgSlMgcmVlbnRlcmFiaWxpdHkgcHJvYmxlbXMuIEFsc28sIHJlbmFtZWQK
KyAgICAgICAgd2lsbERlc3Ryb3lXb3JrZXIgdG8gZGlkRGVzdHJveVdvcmtlciB0byByZWZsZWN0
IHRoYXQgaXQgZ2V0cyBjYWxsZWQgbGF0ZXIgYW5kIGdvdAorICAgICAgICByaWQgb2YgZXhwbGlj
aXQgSURzIGZvciB3b3JrZXJzICh1c2UgYWRkcmVzc2VzIGluc3RlYWQpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyMTMKKworICAgICAgICAqIGlu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHRIb3N0OjpkaWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRU
YXNrOjpQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3N0V29ya2VyTm90aWZp
Y2F0aW9uVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRGVzdHJveVdvcmtlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Oik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kOjpkaWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29y
a2VyUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlclJlc291cmNl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U6Omlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlclJlc291cmNlOjpJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZh
a2VXb3JrZXIuanM6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90
b3R5cGUudGVybWluYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dvcmtlcnNT
aWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaWREZXN0cm95V29ya2VyKToK
KyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0V29ya2VyOjpBYnN0cmFjdFdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdFdvcmtlcjo6b25EZXN0cm95V29ya2VyKToKKyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0
V29ya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdvcmtlcjo6YXNJRCk6CisgICAg
ICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
V29ya2VyOjpTaGFyZWRXb3JrZXIpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6V29ya2VyKToKKwogMjAxMC0wMy0yMyAgR3VzdGF2byBO
b3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDU2Mzg0KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDEwICsyMTMs
MTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZENyZWF0ZVdvcmtlcgogICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdv
cmtlcik7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3aWxsRGVzdHJveVdvcmtlcihs
b25nIGlkKQordm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZERlc3Ryb3lXb3JrZXIobG9uZyBp
ZCkKIHsKICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPndpbGxEZXN0cm95V29ya2VyKGlkKTsKKyAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kaWREZXN0cm95V29ya2VyKGlkKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV09S
S0VSUykKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlz
aW9uIDU2Mzg0KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXT1JLRVJT
KQogICAgIGxvbmcgbmV4dFdvcmtlcklkKCk7CiAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIobG9u
ZyBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpOwotICAgIHZvaWQg
d2lsbERlc3Ryb3lXb3JrZXIobG9uZyBpZCk7CisgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGxv
bmcgaWQpOwogI2VuZGlmCiAgICAgdm9pZCByZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3Jp
cHQobG9uZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhj
ZXB0aW9uKTsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRs
CShyZXZpc2lvbiA1NjM4NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbW9kdWxlIGNvcmUgewogCiAj
aWYgZGVmaW5lZChFTkFCTEVfV09SS0VSUykgJiYgRU5BQkxFX1dPUktFUlMKICAgICAgICAgdm9p
ZCBkaWRDcmVhdGVXb3JrZXIoaW4gbG9uZyBpZCwgaW4gRE9NU3RyaW5nIHVybCwgaW4gYm9vbGVh
biBpc0Zha2VXb3JrZXIpOwotICAgICAgICB2b2lkIHdpbGxEZXN0cm95V29ya2VyKGluIGxvbmcg
aWQpOworICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW4gbG9uZyBpZCk7CiAgICAgICAg
IGxvbmcgbmV4dFdvcmtlcklkKCk7CiAjZW5kaWYKICAgICAgICAgW0N1c3RvbV0gdm9pZCByZXBv
cnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIERPTU9iamVj
dCByZXN1bHQsIGluIGJvb2xlYW4gaXNFeGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDU2Mzg0KQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcs
MTggKzEwNTcsNTcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcgog
fQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENy
ZWF0ZVdvcmtlcihsb25nIGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtl
cikKK2NsYXNzIFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayA6IHB1YmxpYyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckFjdGlvbiBhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBvc3RXb3Jr
ZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayh3b3JrZXIsIGFjdGlvbik7CisgICAgfQorCitw
cml2YXRlOgorICAgIFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayhQYXNzUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckFjdGlvbiBhY3Rpb24pCisgICAgICAgIDogbV93b3JrZXIod29ya2VyKQorICAgICAg
ICAsIG1fYWN0aW9uKGFjdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCisgICAgewor
ICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0Q29udGV4
dC0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAgICAgICAgaW5zcGVjdG9yLT5wb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiBtX3dvcmtlcjsK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24gbV9hY3Rpb247Cit9OworCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5k
KGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xs
ZXI6OldvcmtlckFjdGlvbiBhY3Rpb24pCit7CisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAgICAg
ICByZXR1cm47CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICBjYXNlIEluc3BlY3RvckNvbnRy
b2xsZXI6OldvcmtlckNyZWF0ZWQ6CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENyZWF0ZVdvcmtl
cih3b3JrZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckRlc3Ryb3llZDoKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkRGVzdHJveVdvcmtlcih3
b3JrZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkQ3JlYXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9v
bCBpc1NoYXJlZFdvcmtlcikKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXJSZXNvdXJjZShJ
bnNwZWN0b3JXb3JrZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKSk7
CiAgICAgbV93b3JrZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOwotICAgIGlmIChtX2Zyb250
ZW5kKQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDcmVhdGVXb3JrZXIoKndvcmtlclJlc291cmNl
KTsKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlICYmIG1fZnJvbnRlbmQpCisgICAgICAgIG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnBvc3RUYXNrKFBvc3RXb3JrZXJO
b3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6Y3JlYXRlKHdvcmtlclJlc291cmNlLCBJbnNwZWN0
b3JDb250cm9sbGVyOjpXb3JrZXJDcmVhdGVkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6d2lsbERlc3Ryb3lXb3JrZXIobG9uZyBpZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRGVzdHJveVdvcmtlcihpbnRwdHJfdCBpZCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Niw4ICsxMTE1LDggQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsRGVzdHJveVdvcgogICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlclJl
c291cmNlID0gbV93b3JrZXJzLmZpbmQoaWQpOwogICAgIGlmICh3b3JrZXJSZXNvdXJjZSA9PSBt
X3dvcmtlcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9mcm9udGVuZCkKLSAg
ICAgICAgbV9mcm9udGVuZC0+d2lsbERlc3Ryb3lXb3JrZXIoKndvcmtlclJlc291cmNlLT5zZWNv
bmQpOworICAgIGlmIChtX2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKKyAgICAgICAgbV9p
bnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtl
ck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UtPnNlY29u
ZCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VyRGVzdHJveWVkKSk7CiAgICAgbV93b3JrZXJz
LnJlbW92ZSh3b3JrZXJSZXNvdXJjZSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCklu
ZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA1NjM4
NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTgzLDggKzE4MywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZW1vdmVET01O
b2RlKE5vZGUqKTsKICAgICB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopOwogI2lmIEVO
QUJMRShXT1JLRVJTKQotICAgIHZvaWQgZGlkQ3JlYXRlV29ya2VyKGxvbmcgaWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKTsKLSAgICB2b2lkIHdpbGxEZXN0cm95V29y
a2VyKGxvbmcgaWQpOworICAgIGVudW0gV29ya2VyQWN0aW9uIHsgV29ya2VyQ3JlYXRlZCwgV29y
a2VyRGVzdHJveWVkIH07CisKKyAgICB2b2lkIHBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250
ZW5kKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiwgV29ya2VyQWN0aW9uKTsKKyAgICB2
b2lkIGRpZENyZWF0ZVdvcmtlcihpbnRwdHJfdCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNT
aGFyZWRXb3JrZXIpOworICAgIHZvaWQgZGlkRGVzdHJveVdvcmtlcihpbnRwdHJfdCk7CiAjZW5k
aWYKICAgICB2b2lkIGdldENvb2tpZXMobG9uZyBjYWxsSWQpOwogCkBAIC0zNjEsNyArMzY0LDcg
QEAgcHJpdmF0ZToKICAgICBQcm9maWxlc01hcCBtX3Byb2ZpbGVzOwogI2VuZGlmCiAjaWYgRU5B
QkxFKFdPUktFUlMpCi0gICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZT4gPiBXb3JrZXJzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJf
dCwgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiA+IFdvcmtlcnNNYXA7CiAKICAgICBX
b3JrZXJzTWFwIG1fd29ya2VyczsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmNwcAkocmV2aXNpb24gNTYzODQpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiwxMCArNjAyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENyZWF0ZVdvcmtlcigKICAgICBmdW5jdGlvbi5j
YWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OndpbGxEZXN0cm95V29ya2VyKGNv
bnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIpCit2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpkaWREZXN0cm95V29ya2VyKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3Jr
ZXIpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoIndpbGxEZXN0cm95V29y
a2VyIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZERlc3Ryb3lXb3JrZXIiKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh3b3JrZXIuaWQoKSk7CiAgICAgZnVuY3Rpb24u
Y2FsbCgpOwogfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCShyZXZp
c2lvbiA1NjM4NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNp
ZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoY29uc3QgSW5z
cGVjdG9yV29ya2VyUmVzb3VyY2UmKTsKLSAgICAgICAgdm9pZCB3aWxsRGVzdHJveVdvcmtlcihj
b25zdCBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSYpOworICAgICAgICB2b2lkIGRpZERlc3Ryb3lX
b3JrZXIoY29uc3QgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmKTsKICNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSKQogCiAgICAgICAgIHZvaWQgZGlkR2V0Q29va2llcyhpbnQgY2FsbElkLCBjb25zdCBT
Y3JpcHRBcnJheSYgY29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVzU3RyaW5nKTsKSW5kZXg6
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaAkocmV2aXNpb24g
NTYzODQpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwyMyArNDIsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3Rv
cldvcmtlclJlc291cmNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yV29ya2VyUmVzb3VyY2U+IGNyZWF0ZShsb25nIGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9v
bCBpc1NoYXJlZFdvcmtlcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gY3JlYXRlKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1No
YXJlZFdvcmtlcikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
V29ya2VyUmVzb3VyY2UoaWQsIHVybCwgaXNTaGFyZWRXb3JrZXIpKTsKICAgICB9CiAKLSAgICBs
b25nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGludHB0cl90IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQogICAgIGNvbnN0IFN0cmluZyYgdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KICAgICBib29sIGlzU2hhcmVkV29ya2VyKCkgY29uc3QgeyByZXR1cm4gbV9pc1No
YXJlZFdvcmtlcjsgfQogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZShsb25n
IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKKyAgICBJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZShpbnRwdHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNT
aGFyZWRXb3JrZXIpCiAgICAgICAgIDogbV9pZChpZCkKICAgICAgICAgLCBtX3VybCh1cmwpCiAg
ICAgICAgICwgbV9pc1NoYXJlZFdvcmtlcihpc1NoYXJlZFdvcmtlcikKICAgICB7CiAgICAgfQog
Ci0gICAgaW50IG1faWQ7CisgICAgaW50cHRyX3QgbV9pZDsKICAgICBTdHJpbmcgbV91cmw7CiAg
ICAgYm9vbCBtX2lzU2hhcmVkV29ya2VyOwogfTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZEZha2VXb3JrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlci5qcwkocmV2aXNpb24gNTYzODQpCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2VyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIEZha2VXb3JrZXIucHJvdG90eXBlID0gewogCiAg
ICAgdGVybWluYXRlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBJbmplY3RlZFNjcmlwdEhv
c3Qud2lsbERlc3Ryb3lXb3JrZXIodGhpcy5faWQpOworICAgICAgICBJbmplY3RlZFNjcmlwdEhv
c3QuZGlkRGVzdHJveVdvcmtlcih0aGlzLl9pZCk7CiAKICAgICAgICAgaWYgKHRoaXMuX2ZyYW1l
ICE9IG51bGwpIHsKICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubWVzc2FnZSA9IHRoaXMuX3dv
cmtlci5vbm1lc3NhZ2UgPSBub29wOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dvcmtlcnNTaWRlYmFyUGFuZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV29ya2Vyc1NpZGViYXJQYW5lLmpzCShyZXZpc2lvbiA1NjM4NCkKKysrIFdlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Xb3JrZXJzU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBXZWJJbnNwZWN0b3IuZGlkQ3JlYXRlV29ya2VyID0gZnVu
Y3Rpb24oCiAgICAgd29ya2Vyc1BhbmUuYWRkV29ya2VyLmFwcGx5KHdvcmtlcnNQYW5lLCBhcmd1
bWVudHMpOwogfQogCi1XZWJJbnNwZWN0b3Iud2lsbERlc3Ryb3lXb3JrZXIgPSBmdW5jdGlvbigp
CitXZWJJbnNwZWN0b3IuZGlkRGVzdHJveVdvcmtlciA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIg
d29ya2Vyc1BhbmUgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuc2lkZWJhclBhbmVzLndv
cmtlcnM7CiAgICAgd29ya2Vyc1BhbmUucmVtb3ZlV29ya2VyLmFwcGx5KHdvcmtlcnNQYW5lLCBh
cmd1bWVudHMpOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCShyZXZpc2lvbiA1
NjM4NCkKKysrIFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDExICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbG9uZyBBYnN0
cmFjdFdvcmtlcjo6c19sYXN0SWQ7Ci0KIEFic3RyYWN0V29ya2VyOjpBYnN0cmFjdFdvcmtlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNv
bnRleHQsIHRoaXMpCi0gICAgLCBtX2lkKCsrc19sYXN0SWQpCiB7CiB9CiAKQEAgLTYxLDcgKzU4
LDcgQEAgdm9pZCBBYnN0cmFjdFdvcmtlcjo6b25EZXN0cm95V29ya2VyKCkKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPyBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKSA6IDApCi0gICAgICAgIGluc3BlY3Rvci0+d2lsbERlc3Ryb3lXb3Jr
ZXIoaWQoKSk7CisgICAgICAgIGluc3BlY3Rvci0+ZGlkRGVzdHJveVdvcmtlcihhc0lEKCkpOwog
I2VuZGlmCiB9CiAKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCShyZXZpc2lvbiA1NjM4
NCkKKysrIFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdXNpbmcgUmVmQ291
bnRlZDxBYnN0cmFjdFdvcmtlcj46OnJlZjsKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxBYnN0
cmFjdFdvcmtlcj46OmRlcmVmOwogCi0gICAgICAgIGxvbmcgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAgICAgICAg
IEFic3RyYWN0V29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICAgICAgdmlydHVh
bCB+QWJzdHJhY3RXb3JrZXIoKTsKQEAgLTY1LDYgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHByb3RlY3RlZDoKICAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgY29udmVy
dHMgYSBVUkwgdG8gYW4gYWJzb2x1dGUgVVJMIGFuZCBjaGVja3MgdGhlIHJlc3VsdCBmb3IgdmFs
aWRpdHkuCiAgICAgICAgIEtVUkwgcmVzb2x2ZVVSTChjb25zdCBTdHJpbmcmIHVybCwgRXhjZXB0
aW9uQ29kZSYgZWMpOworICAgICAgICBpbnRwdHJfdCBhc0lEKCkgY29uc3QgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KQEAgLTc0LDkgKzc0LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIG9uRGVzdHJveVdvcmtlcigpOwog
ICAgICAgICAKICAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwotICAg
ICAgICBsb25nIG1faWQ7Ci0KLSAgICAgICAgc3RhdGljIGxvbmcgc19sYXN0SWQ7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdv
cmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAJ
KHJldmlzaW9uIDU2Mzg0KQorKysgV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgU2hhcmVkV29ya2VyOjpTaGFyZWRXb3JrZXIo
Y29uc3QgU3RyaW5nJgogICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3QodGhpcywg
cmVtb3RlUG9ydC5yZWxlYXNlKCksIHNjcmlwdFVybCwgbmFtZSwgZWMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICBpbnNw
ZWN0b3ItPmRpZENyZWF0ZVdvcmtlcihpZCgpLCBzY3JpcHRVcmwuc3RyaW5nKCksIHRydWUpOwor
ICAgICAgICBpbnNwZWN0b3ItPmRpZENyZWF0ZVdvcmtlcihhc0lEKCksIHNjcmlwdFVybC5zdHJp
bmcoKSwgdHJ1ZSk7CiAjZW5kaWYKIH0KIApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHJldmlzaW9uIDU2
Mzg0KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDcgKzYzLDcgQEAgV29ya2VyOjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdAogICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5v
dCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIg
b2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxpc3RlbmVycy4K
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3IgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkK
LSAgICAgICAgaW5zcGVjdG9yLT5kaWRDcmVhdGVXb3JrZXIoaWQoKSwgc2NyaXB0VVJMLnN0cmlu
ZygpLCBmYWxzZSk7CisgICAgICAgIGluc3BlY3Rvci0+ZGlkQ3JlYXRlV29ya2VyKGFzSUQoKSwg
c2NyaXB0VVJMLnN0cmluZygpLCBmYWxzZSk7CiAjZW5kaWYKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>