<?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>197172</bug_id>
          
          <creation_ts>2019-04-22 11:35:22 -0700</creation_ts>
          <short_desc>JSC should have public API for unhandled promise rejections</short_desc>
          <delta_ts>2024-09-10 20:23:03 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=150358</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Anthony">michael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>canymebee</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mihaip</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1529324</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Anthony">michael</who>
    <bug_when>2019-04-22 11:35:22 -0700</bug_when>
    <thetext>Hi,

Apologies if this is in the wrong place, but I&apos;m using JavaScriptCore in a native Swift app and I&apos;m unable to catch errors created in an async promise stack. I believe Safari has a global window event, similar to Node&apos;s process.on(&apos;unhandledRejection&apos;), but I have had no luck finding anything describing how to do this when creating a JSCEngine natively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529461</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-22 16:38:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/50112559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531603</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-04-30 11:34:15 -0700</bug_when>
    <thetext>Unfortunately, I don&apos;t think there is anyway to do this right now in JSC. It probably wouldn&apos;t be too hard to add a delegate to JSContext that would be called on unhandledRejection though. I can&apos;t promise when such an API will happen, however, but it seems like a good idea to have something like that, IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535426</commentid>
    <comment_count>3</comment_count>
      <attachid>369669</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-05-12 00:09:41 -0700</bug_when>
    <thetext>Created attachment 369669
Patch

Simple one, just works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543393</commentid>
    <comment_count>4</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-06-10 11:19:29 -0700</bug_when>
    <thetext>This obsolete now that https://bugs.webkit.org/show_bug.cgi?id=198709 landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546700</commentid>
    <comment_count>5</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-06-20 15:42:25 -0700</bug_when>
    <thetext>Is this blocked by anything? Turns out we have a need for this too so I&apos;d be happy to assist in getting it done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550607</commentid>
    <comment_count>6</comment_count>
      <attachid>373561</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-05 20:27:19 -0700</bug_when>
    <thetext>Created attachment 373561
Finish Yusuke&apos;s PoC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550613</commentid>
    <comment_count>7</comment_count>
      <attachid>373564</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-05 22:23:39 -0700</bug_when>
    <thetext>Created attachment 373564
Patch based on microtask queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550616</commentid>
    <comment_count>8</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-05 22:48:58 -0700</bug_when>
    <thetext>This patch completes the other half of Yusuke&apos;s proof of concept.

This is my first time dealing with the public API, so here&apos;s hoping I&apos;ve not made too many mistakes with regard to best practices. :)

In particular, Yusuke mentioned that we need to GC-mark the held promises but I don&apos;t understand concretely what is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550636</commentid>
    <comment_count>9</comment_count>
      <attachid>373564</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-07-06 11:15:37 -0700</bug_when>
    <thetext>Comment on attachment 373564
Patch based on microtask queue

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        This patch allows callbacks for unhandled and late-handled promise rejections to be set via JSC&apos;s public C API.
&gt; +        Since there is no event loop in such an environment, these callbacks fire off of the microtask queue.
&gt; +        Callbacks receive the promise and rejection reason as arguments and their return value is ignored.

To be clear, we do assume there&apos;s a run loop in the C API. We just don&apos;t have a way to configure it beyond the default of using the one associated with the thread the VM was created on. We use that run loop for GC work and for resolving Wasm compilations. 

I think we should use the same queue for this... but I could be convinced otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552245</commentid>
    <comment_count>10</comment_count>
      <attachid>373962</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-11 15:08:14 -0700</bug_when>
    <thetext>Created attachment 373962
WIP patch based on run loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552773</commentid>
    <comment_count>11</comment_count>
      <attachid>374097</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-14 16:07:26 -0700</bug_when>
    <thetext>Created attachment 374097
WIP patch based on run loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552782</commentid>
    <comment_count>12</comment_count>
      <attachid>374102</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-14 18:52:59 -0700</bug_when>
    <thetext>Created attachment 374102
Minimal PromiseDeferredTimer usage example

So if vm.promiseDeferredTimer is the correct way to schedule something on the run loop, then I think there must be something else that I&apos;m not understanding, because I don&apos;t see how this can result in a usable API.

Here&apos;s a patch that&apos;s as minimal as I could make it. Every time you call `Promise.reject()` from the JSC REPL, it schedules some text to be printed. In order to have the printing actually occur, however, we have to make sure that the REPL calls runRunLoop after each iteration.

It&apos;s possible that this would be acceptable for the REPL case, but the actual goal here is to provide a public API for registering unhandled rejection callbacks. It seems rather ghastly if this new API is to require another API that the embedder must call every single time they want these callbacks to actually fire. But even if that were how it has to be, I&apos;m not actually sure how to implement said other API without running into the must-NOT-be-holding-a-lock ASSERT:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp#L87</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552887</commentid>
    <comment_count>13</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-07-15 11:05:37 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #12)
&gt; Created attachment 374102 [details]
&gt; Minimal PromiseDeferredTimer usage example
&gt; 
&gt; So if vm.promiseDeferredTimer is the correct way to schedule something on
&gt; the run loop, then I think there must be something else that I&apos;m not
&gt; understanding, because I don&apos;t see how this can result in a usable API.
&gt; 
&gt; Here&apos;s a patch that&apos;s as minimal as I could make it. Every time you call
&gt; `Promise.reject()` from the JSC REPL, it schedules some text to be printed.
&gt; In order to have the printing actually occur, however, we have to make sure
&gt; that the REPL calls runRunLoop after each iteration.

Unless I&apos;m missing something, you don&apos;t have to call a second API. That API is just for testing purposes so that we break out of the runloop when we are done testing. Any application with a runloop will be running JSC out of a runloop anyway so they shouldn&apos;t need to call that API. We don&apos;t do so from the CLI because it&apos;s a CLI tool rather than a full app. I think we should design our APIs around use in full applications rather than run-once tools as that&apos;s probably the vast majority of use cases.

&gt; 
&gt; It&apos;s possible that this would be acceptable for the REPL case, but the
&gt; actual goal here is to provide a public API for registering unhandled
&gt; rejection callbacks. It seems rather ghastly if this new API is to require
&gt; another API that the embedder must call every single time they want these
&gt; callbacks to actually fire. But even if that were how it has to be, I&apos;m not
&gt; actually sure how to implement said other API without running into the
&gt; must-NOT-be-holding-a-lock ASSERT:
&gt; https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/
&gt; PromiseDeferredTimer.cpp#L87

Since this is a diagnostic API I don&apos;t think it&apos;s the end of the world. That said, I could see expecting this to run before my application exits, which the runloop based version makes more complicated. One option could be to check for ready promises when releasing the VM lock. We&apos;ll need to verify this behavior is valid WRT WebCore though. e.g. if wasm compilations are ok to run after micro tasks have been drained but before the rest of WebCore is consulted. There might also be other weirdness; I have to think about it more.

That assertion is there because we are going to run a runloop, which can run for an unbounded amount of time. If we are holding the API lock, it&apos;s possible that the VM will be locked indefinitely and the application could deadlock. It&apos;s also not a fundamental assertion just a this is possibly a bug if you hit it one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552937</commentid>
    <comment_count>14</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-15 13:24:56 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #13)
&gt; Unless I&apos;m missing something, you don&apos;t have to call a second API. That API
&gt; is just for testing purposes so that we break out of the runloop when we are
&gt; done testing. Any application with a runloop will be running JSC out of a
&gt; runloop anyway so they shouldn&apos;t need to call that API. We don&apos;t do so from
&gt; the CLI because it&apos;s a CLI tool rather than a full app. I think we should
&gt; design our APIs around use in full applications rather than run-once tools
&gt; as that&apos;s probably the vast majority of use cases.

That makes sense; perhaps the focal point of my confusion then is just that I don&apos;t know how to make my API test valid. 😅</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553406</commentid>
    <comment_count>15</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-16 18:08:45 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #12)
&gt; But even if that were how it has to be, I&apos;m not
&gt; actually sure how to implement said other API without running into the
&gt; must-NOT-be-holding-a-lock ASSERT
Hmm, apparently I was wrong about this part -- introducing a JSGlobalContextRunRunLoop call does &quot;just work&quot; for TestAPI.

(Actually, for Cocoa, it suffices to call RunLoop::current().runForDuration(0_s), but confusingly RunLoop::iterate() doesn&apos;t work on other platforms -- for instance, the Windows message queue just never sees any messages, regardless of whether I try blocking on the current thread or make a new one...)



(In reply to Ross Kirsling from comment #14)
&gt; That makes sense; perhaps the focal point of my confusion then is just that
&gt; I don&apos;t know how to make my API test valid. 😅
I was also wrong about this -- given the above, it&apos;s easy to make the test valid; making it representative of application usage is another story.

Concretely, we have a sample app for our platform that does two things:
1. create two threads, each of which executes a script and serves as an inspection target
2. start remote inspector server and (using a hacked-in downstream API) kick off the RunLoopGeneric that it requires

Using the WIP patch allows us to set an unhandled rejection callback on either of the inspection targets, but that callback will never fire.
If we add in JSGlobalContextRunRunLoop and call it on every iteration of that thread&apos;s while(true) loop, then things do seem to work.

Perhaps I was just confused by how brainlessly simple the microtask-queue-based approach is to use, and this *would* in fact be acceptable for application usage if we were to give it the name JSGlobalContextHandlePendingTasks instead?


But if not, then I surely don&apos;t know how to determine what the correct answer is; I actually still don&apos;t think I even understand what &quot;Any application with a runloop will be running JSC out of a runloop anyway so they shouldn&apos;t need to call that API.&quot; means. (I initially thought it meant that this would all magically work in an application context based on something else that they&apos;re expected to do. Maybe that&apos;s true for ObjC or something? But it&apos;s clearly not true elsewhere.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553418</commentid>
    <comment_count>16</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-16 19:33:57 -0700</bug_when>
    <thetext>Hmm, it appears that another way to make the sample app I mentioned work is to call that &quot;hacked-in downstream API&quot; -- i.e. just RunLoop::run() -- on the individual JSContext threads.

So then it would seem like what we require is a public API to call one of the following:
1. vm.promiseDeferredTimer-&gt;runRunLoop()
2. RunLoop::run()
3. RunLoop::iterate()

The first is probably too specific and the second is probably unrealistic if it implies relinquishing all control. So then perhaps it&apos;s just a matter of finding a way to implement RunLoop::iterate() for all platforms and exposing it to the user?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556312</commentid>
    <comment_count>17</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-26 18:01:28 -0700</bug_when>
    <thetext>(Note that my previous comments weren&apos;t rhetorical, but... :P)

Allow me to go back to square one here and ask something I would&apos;ve asked much earlier had I started this effort from scratch:

If we look at what WebCore and node-jsc do, the existing issue could simply be phrased as &quot;since globalObjectMethodTable is a private matter, there is no public API by which an embedder can provide their own promiseRejectionTracker implementation&quot;.

In this thread, we&apos;ve been assuming that promiseRejectionTracker is something with a singular expected implementation and therefore copy-pasting it from WebCore down into JSC would be appropriate so long as we change the scheduling mechanism. But then if it&apos;s turning out that the scheduling mechanism isn&apos;t fully contained within JSC anyway (in the sense that we need to design a whole additional API in order for the embedder to be able to use it), then should we just have them register a whole promiseRejectionTracker instead, instead of registering JSFunctions for individual event callbacks?

After all, my design here was predicated upon Yusuke&apos;s first patch, in which the embedder needs not worry about timing, thanks to the microtask queue. If we&apos;re now thinking that they *should* worry about timing, via their own lowercase-r run loop which they need for other things anyway, that&apos;s fine, but doesn&apos;t that mean the capital-R WTF::RunLoop was just a red herring this whole time?

One way or another, I need to know what target I&apos;m aiming for, if there&apos;s any hope of hitting it. :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557122</commentid>
    <comment_count>18</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-30 16:31:12 -0700</bug_when>
    <thetext>After all that turmoil, it seems that my confusion all stemmed from something very simple:

WTF::RunLoop never checks USE(CF) because Windows platforms are USE(WINDOWS_EVENT_LOOP) &amp;&amp; USE(CF), while JSC::RunLoopTimer / JSC::PromiseDeferredTimer exclusively check USE(CF).

While I think this is something that needs to be reworked in a future patch, it turns out that defining a JSRunLoopIterate() with a USE(CF)-conditional implementation suffices to make this patch work on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557145</commentid>
    <comment_count>19</comment_count>
      <attachid>375197</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-30 17:20:23 -0700</bug_when>
    <thetext>Created attachment 375197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559375</commentid>
    <comment_count>20</comment_count>
      <attachid>375197</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-07 16:40:06 -0700</bug_when>
    <thetext>Comment on attachment 375197
Patch

This isn’t great for iOS and macOS where we have an Objective-C and Swift API that we are not adding to here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559434</commentid>
    <comment_count>21</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-07 21:29:00 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #20)
&gt; Comment on attachment 375197 [details]
&gt; Patch
&gt; 
&gt; This isn’t great for iOS and macOS where we have an Objective-C and Swift
&gt; API that we are not adding to here.

I was hoping that JSGlobalContextSetUnhandledRejectionCallback would be useful regardless of what sort of application it is -- is that not the case? (Or more broadly, does &quot;anything that can be platform-agnostic ought to be&quot; not apply along this particular boundary?)

Either way, Keith had also voiced concern to me over IRC regarding JSRunLoopIterate not being useful for CF platforms and suggested perhaps exposing a flag that would cause `vm.promiseDeferredTimer-&gt;runRunLoop()` to be called after microtask drain instead.

(He also suggested roping in Geoff for further opinions.)

To be frank, I find it sort of disheartening that we have WTF::RunLoop and yet JSC ignores it completely when it can, accessing CFRunLoop directly and expecting embedders to do the same, creating what seems like an unnecessarily-fundamental divide between embedder platforms. :(

Maybe the original microtask queue-based solution wasn&apos;t so bad? ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559626</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-08-08 12:44:58 -0700</bug_when>
    <thetext>&gt; To be frank, I find it sort of disheartening that we have WTF::RunLoop and
&gt; yet JSC ignores it completely when it can, accessing CFRunLoop directly and
&gt; expecting embedders to do the same, creating what seems like an
&gt; unnecessarily-fundamental divide between embedder platforms. :(

There&apos;s no reason it has to be this way!

I believe some of this behavior developed organically because the original CF use in JSC predated WTF::RunLoop. Now that we have WTF::RunLoop, let&apos;s use it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559698</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-08 16:03:02 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #21)
&gt; I was hoping that JSGlobalContextSetUnhandledRejectionCallback would be
&gt; useful regardless of what sort of application it is -- is that not the case?
&gt; (Or more broadly, does &quot;anything that can be platform-agnostic ought to be&quot;
&gt; not apply along this particular boundary?)

These C functions are not part of the API on iOS and macOS. They are considered internal implementation details on those platforms. So, on those platforms we often need to add Objective-C API that serves the same purpose. That’s what I was referring to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559927</commentid>
    <comment_count>24</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-09 10:14:26 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #22)
&gt; I believe some of this behavior developed organically because the original
&gt; CF use in JSC predated WTF::RunLoop. Now that we have WTF::RunLoop, let&apos;s
&gt; use it!

This is relieving to hear -- I didn&apos;t realize the timeline. :)
I suppose I&apos;ll handle that in a separate patch though, if the solution here doesn&apos;t depend on it.


(In reply to Darin Adler from comment #23)
&gt; These C functions are not part of the API on iOS and macOS. They are
&gt; considered internal implementation details on those platforms. So, on those
&gt; platforms we often need to add Objective-C API that serves the same purpose.
&gt; That’s what I was referring to.

Wow, I had no idea, but I see what you&apos;re saying -- I can add wrappers to JSContext.mm if that suffices.

Actually, if that&apos;s the case, then would JSRunLoopIterate still be reasonable to add *just* for C and not for ObjC, if the concern is purely that Cocoa platforms won&apos;t use it? (Or is this bad form, if perhaps the C API is meant to be a strict subset?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559958</commentid>
    <comment_count>25</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-09 11:34:25 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #24)
&gt; Actually, if that&apos;s the case, then would JSRunLoopIterate still be
&gt; reasonable to add *just* for C and not for ObjC, if the concern is purely
&gt; that Cocoa platforms won&apos;t use it? (Or is this bad form, if perhaps the C
&gt; API is meant to be a strict subset?)

Digging further, it seems like if nothing else, maybe it could be moved to JSBasePrivate alongside JSReportExtraMemoryCost?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560068</commentid>
    <comment_count>26</comment_count>
      <attachid>375965</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-09 15:05:21 -0700</bug_when>
    <thetext>Created attachment 375965
Patch (run loop)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560069</commentid>
    <comment_count>27</comment_count>
      <attachid>375965</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-09 15:07:38 -0700</bug_when>
    <thetext>Comment on attachment 375965
Patch (run loop)

Moved JSRunLoopIterate to JSBasePrivate, added ObjC wrappers for callback registration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560877</commentid>
    <comment_count>28</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 11:40:01 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561260</commentid>
    <comment_count>29</comment_count>
      <attachid>376286</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-14 11:48:40 -0700</bug_when>
    <thetext>Created attachment 376286
Patch (microtask queue)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561303</commentid>
    <comment_count>30</comment_count>
      <attachid>376286</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-14 13:09:49 -0700</bug_when>
    <thetext>Comment on attachment 376286
Patch (microtask queue)

Keith informed me that we might be okay with the original microtask queue-based approach after all (which would remove any cross-platform worries for the time being) -- if so, we can go with this patch instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563336</commentid>
    <comment_count>31</comment_count>
      <attachid>376833</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-20 17:44:15 -0700</bug_when>
    <thetext>Created attachment 376833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563337</commentid>
    <comment_count>32</comment_count>
      <attachid>376833</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-20 17:45:51 -0700</bug_when>
    <thetext>Comment on attachment 376833
Patch

Keith suggested dropping the &quot;rejectionhandled&quot; API if nobody&apos;s requesting it, so here&apos;s the simplest patch yet -- it only tracks unhandled rejections and fires off the microtask queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563524</commentid>
    <comment_count>33</comment_count>
      <attachid>376833</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-21 09:43:46 -0700</bug_when>
    <thetext>Comment on attachment 376833
Patch

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

This looks good to me, but I think a JavaScript engine expert should probably do the formal review+ duties.

&gt; Source/JavaScriptCore/API/JSContext.h:184
&gt; +@discussion Similar to window.addEventListener(&apos;unhandledrejection&apos;), but for a standalone JSContext.

I think it’s confusing that this method documentation does not mention that, for the JSContext from a web page, this callback will never be called because WebKit will handle it. The documentation acknowledges the existence of web browsing by mentioning the event listener on the window object, but then doesn’t clarify that this method is only relevant when there is no window object, essentially &quot;when JavaScript is used outside a webpage context&quot;.

I’m not sure the right way to word this, but I think it needs to be mentioned.

&gt; Source/JavaScriptCore/API/JSContext.mm:269
&gt; +    if (exception)
&gt; +        [self notifyException:exception];

Is it OK to not have a &quot;return&quot; here? Why?

&gt; Source/JavaScriptCore/API/JSContextRef.h:162
&gt; +@discussion JSC-only alternative to window.addEventListener(&apos;unhandledrejection&apos;).

Here we get slightly closer by saying &quot;JSC-only&quot;. But the same comment as above applies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563555</commentid>
    <comment_count>34</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-21 10:54:55 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #33)
&gt; Comment on attachment 376833 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376833&amp;action=review
&gt; 
&gt; This looks good to me, but I think a JavaScript engine expert should
&gt; probably do the formal review+ duties.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSContext.h:184
&gt; &gt; +@discussion Similar to window.addEventListener(&apos;unhandledrejection&apos;), but for a standalone JSContext.
&gt; 
&gt; I think it’s confusing that this method documentation does not mention that,
&gt; for the JSContext from a web page, this callback will never be called
&gt; because WebKit will handle it. The documentation acknowledges the existence
&gt; of web browsing by mentioning the event listener on the window object, but
&gt; then doesn’t clarify that this method is only relevant when there is no
&gt; window object, essentially &quot;when JavaScript is used outside a webpage
&gt; context&quot;.
&gt; 
&gt; I’m not sure the right way to word this, but I think it needs to be
&gt; mentioned.

I actually don&apos;t think this is an issue because the only APIs that provide a JSContext and a window are officially deprecated. WKWebView does not provide any JS objects to the native application.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563564</commentid>
    <comment_count>35</comment_count>
      <attachid>376833</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-21 11:06:01 -0700</bug_when>
    <thetext>Comment on attachment 376833
Patch

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

&gt; Source/JavaScriptCore/API/JSContext.h:187
&gt; +- (void)setUnhandledRejectionCallback:(JSValue *)function;

I&apos;m not sure we should have this function in the ObjC API. I think it might be nicer if the API was: when creating a JSContext, if the JSContextRef does not already have an unhandledRejectionCallback set a function that calls the exceptionHandler callback. There is some downside that we can&apos;t provide the promise object. Although, I suppose we could provide that as an additional &quot;currentArguments&quot; value on the JSContext.

&gt;&gt; Source/JavaScriptCore/API/JSContext.mm:269
&gt;&gt; +        [self notifyException:exception];
&gt; 
&gt; Is it OK to not have a &quot;return&quot; here? Why?

Yeah, there needs to be a return here.

&gt; Source/JavaScriptCore/API/JSContextRef.h:167
&gt; +JS_EXPORT void JSGlobalContextSetUnhandledRejectionCallback(JSGlobalContextRef ctx, JSObjectRef function, JSValueRef* exception);

This needs an JSC_API_AVAILABLE(macos(JSC_MAC_TBA), ios(JSC_IOS_TBA)) annotation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563581</commentid>
    <comment_count>36</comment_count>
      <attachid>376833</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-21 11:26:14 -0700</bug_when>
    <thetext>Comment on attachment 376833
Patch

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

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:772
&gt; +    if (promise-&gt;inherits&lt;JSInternalPromise&gt;(vm))

We normally do this via jsDynamicCast&lt;JSInternalPromise&gt;(vm, promise). We have optimizations for some cases there that we haven&apos;t applied to inherits and it makes it easier to search for.

&gt; Source/JavaScriptCore/runtime/VM.h:1072
&gt; +    Vector&lt;Strong&lt;JSPromise&gt;&gt; m_aboutToBeNotifiedRejectedPromises;

I feel like this is going to be a huge list for non-trivial async programs. if you have a loop with:

let p = new Promise((resolve, reject) =&gt; {
    ...
    reject(p)
});

p will be kept alive until the the microtasks are drained. Which means programs will OOM if they never drain all their microtasks...

I think, at least, you&apos;ll need to clear handled promises at the GC flip. See where we call finalizeUnconditionalFinalizers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563607</commentid>
    <comment_count>37</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 12:19:36 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #36)
&gt; &gt; Source/JavaScriptCore/runtime/VM.h:1072
&gt; &gt; +    Vector&lt;Strong&lt;JSPromise&gt;&gt; m_aboutToBeNotifiedRejectedPromises;
&gt; 
&gt; I feel like this is going to be a huge list for non-trivial async programs.
&gt;
&gt; if you have a loop with:
&gt;
&gt; let p = new Promise((resolve, reject) =&gt; {
&gt;     ...
&gt;     reject(p)
&gt; });
&gt; 
&gt; p will be kept alive until the the microtasks are drained. Which means
&gt; programs will OOM if they never drain all their microtasks...

Is this concern to unique the non-WebCore case...?

WebCore uses DOMGuarded&lt;JSPromise&gt; instead of Strong&lt;JSPromise&gt;, but otherwise this is meant to be the same -- in particular, WebCore processes m_aboutToBeNotifiedRejectedPromises right after microtask checkpoint (even though it subsequently schedules the *reporting* on the event loop).

https://github.com/WebKit/webkit/blob/master/Source/WebCore/dom/RejectedPromiseTracker.cpp#L134-L145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563612</commentid>
    <comment_count>38</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 12:21:40 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #37)
&gt; Is this concern to unique the non-WebCore case...?

* unique to

(BZ really needs an edit feature... 😭 I spend ages writing a comment and then introduce a typo at the last moment...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563618</commentid>
    <comment_count>39</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 12:25:13 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #35)
&gt; &gt; Source/JavaScriptCore/API/JSContext.h:187
&gt; &gt; +- (void)setUnhandledRejectionCallback:(JSValue *)function;
&gt; 
&gt; I&apos;m not sure we should have this function in the ObjC API. I think it might
&gt; be nicer if the API was: when creating a JSContext, if the JSContextRef does
&gt; not already have an unhandledRejectionCallback set a function that calls the
&gt; exceptionHandler callback. There is some downside that we can&apos;t provide the
&gt; promise object. Although, I suppose we could provide that as an additional
&gt; &quot;currentArguments&quot; value on the JSContext.

Don&apos;t we want this to be opt-in though? Seems like it would be a huge shift to auto-convert unhandled rejections  to exceptions by default, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563710</commentid>
    <comment_count>40</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-21 15:03:57 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #39)
&gt; (In reply to Keith Miller from comment #35)
&gt; &gt; &gt; Source/JavaScriptCore/API/JSContext.h:187
&gt; &gt; &gt; +- (void)setUnhandledRejectionCallback:(JSValue *)function;
&gt; &gt; 
&gt; &gt; I&apos;m not sure we should have this function in the ObjC API. I think it might
&gt; &gt; be nicer if the API was: when creating a JSContext, if the JSContextRef does
&gt; &gt; not already have an unhandledRejectionCallback set a function that calls the
&gt; &gt; exceptionHandler callback. There is some downside that we can&apos;t provide the
&gt; &gt; promise object. Although, I suppose we could provide that as an additional
&gt; &gt; &quot;currentArguments&quot; value on the JSContext.
&gt; 
&gt; Don&apos;t we want this to be opt-in though? Seems like it would be a huge shift
&gt; to auto-convert unhandled rejections  to exceptions by default, no?

I can see the argument for and against this version. Assuming, unhandledPromiseRejection callbacks are rare this wouldn&apos;t really be a breaking change. If they happen all the time, then it seems pretty reasonable to do so. If we find we have a compatibility issue we (on Darwin anyway) could also guard the call with a linked on or after check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563712</commentid>
    <comment_count>41</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-21 15:06:47 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #37)
&gt; (In reply to Keith Miller from comment #36)
&gt; &gt; &gt; Source/JavaScriptCore/runtime/VM.h:1072
&gt; &gt; &gt; +    Vector&lt;Strong&lt;JSPromise&gt;&gt; m_aboutToBeNotifiedRejectedPromises;
&gt; &gt; 
&gt; &gt; I feel like this is going to be a huge list for non-trivial async programs.
&gt; &gt;
&gt; &gt; if you have a loop with:
&gt; &gt;
&gt; &gt; let p = new Promise((resolve, reject) =&gt; {
&gt; &gt;     ...
&gt; &gt;     reject(p)
&gt; &gt; });
&gt; &gt; 
&gt; &gt; p will be kept alive until the the microtasks are drained. Which means
&gt; &gt; programs will OOM if they never drain all their microtasks...
&gt; 
&gt; Is this concern to unique the non-WebCore case...?
&gt; 
&gt; WebCore uses DOMGuarded&lt;JSPromise&gt; instead of Strong&lt;JSPromise&gt;, but
&gt; otherwise this is meant to be the same -- in particular, WebCore processes
&gt; m_aboutToBeNotifiedRejectedPromises right after microtask checkpoint (even
&gt; though it subsequently schedules the *reporting* on the event loop).
&gt; 
&gt; https://github.com/WebKit/webkit/blob/master/Source/WebCore/dom/
&gt; RejectedPromiseTracker.cpp#L134-L145

Hmm, then I won&apos;t worry about it for now but can you file a bug on it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563729</commentid>
    <comment_count>42</comment_count>
      <attachid>376931</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 15:25:32 -0700</bug_when>
    <thetext>Created attachment 376931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563730</commentid>
    <comment_count>43</comment_count>
      <attachid>376931</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 15:26:08 -0700</bug_when>
    <thetext>Comment on attachment 376931
Patch

Addressed feedback modulo outstanding questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563738</commentid>
    <comment_count>44</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-21 15:33:34 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #43)
&gt; Comment on attachment 376931 [details]
&gt; Patch
&gt; 
&gt; Addressed feedback modulo outstanding questions.

Sorry, I&apos;m a bit lost. What are the outstanding questions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563787</commentid>
    <comment_count>45</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 16:17:48 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #44)
&gt; Sorry, I&apos;m a bit lost. What are the outstanding questions?

Sorry, I hadn&apos;t noticed your latest comments when I wrote that.

(In reply to Keith Miller from comment #41)
&gt; Hmm, then I won&apos;t worry about it for now but can you file a bug on it?

Opened bug 201005.

(In reply to Keith Miller from comment #40)
&gt; I can see the argument for and against this version. Assuming,
&gt; unhandledPromiseRejection callbacks are rare this wouldn&apos;t really be a
&gt; breaking change. If they happen all the time, then it seems pretty
&gt; reasonable to do so. If we find we have a compatibility issue we (on Darwin
&gt; anyway) could also guard the call with a linked on or after check.

Based on our IRC conversation, I guess we could move the C API to JSContextRefPrivate and postpone the ObjC API. It&apos;s a bit unfortunate for the OP of this bug though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563799</commentid>
    <comment_count>46</comment_count>
      <attachid>376949</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 16:36:41 -0700</bug_when>
    <thetext>Created attachment 376949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564111</commentid>
    <comment_count>47</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-08-22 10:15:19 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #45)
&gt; (In reply to Keith Miller from comment #40)
&gt; &gt; I can see the argument for and against this version. Assuming,
&gt; &gt; unhandledPromiseRejection callbacks are rare this wouldn&apos;t really be a
&gt; &gt; breaking change. If they happen all the time, then it seems pretty
&gt; &gt; reasonable to do so. If we find we have a compatibility issue we (on Darwin
&gt; &gt; anyway) could also guard the call with a linked on or after check.
&gt; 
&gt; Based on our IRC conversation, I guess we could move the C API to
&gt; JSContextRefPrivate and postpone the ObjC API. It&apos;s a bit unfortunate for
&gt; the OP of this bug though...

Should we maybe fork this bug and keep this open for Apple folks to actually move it over to public and provide the Obj C interface then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564320</commentid>
    <comment_count>48</comment_count>
      <attachid>376949</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-22 17:04:10 -0700</bug_when>
    <thetext>Comment on attachment 376949
Patch

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

r=me.

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:521
&gt;  }

Can you add tests for:

1) promise that&apos;s rejected then handled synchronously.
2) promise that&apos;s rejected then handled in a microtask turn.
3) promise that&apos;s rejected in a microtask then handled in a later microtask.
4) promise that&apos;s rejected in a microtask then not handled.

&gt; Source/JavaScriptCore/runtime/VM.h:1072
&gt; +    Vector&lt;Strong&lt;JSPromise&gt;&gt; m_aboutToBeNotifiedRejectedPromises;

Can you add a FIXME with a link to the bug you filed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564323</commentid>
    <comment_count>49</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-08-22 17:05:59 -0700</bug_when>
    <thetext>(In reply to Don Olmstead from comment #47)
&gt; (In reply to Ross Kirsling from comment #45)
&gt; &gt; (In reply to Keith Miller from comment #40)
&gt; &gt; &gt; I can see the argument for and against this version. Assuming,
&gt; &gt; &gt; unhandledPromiseRejection callbacks are rare this wouldn&apos;t really be a
&gt; &gt; &gt; breaking change. If they happen all the time, then it seems pretty
&gt; &gt; &gt; reasonable to do so. If we find we have a compatibility issue we (on Darwin
&gt; &gt; &gt; anyway) could also guard the call with a linked on or after check.
&gt; &gt; 
&gt; &gt; Based on our IRC conversation, I guess we could move the C API to
&gt; &gt; JSContextRefPrivate and postpone the ObjC API. It&apos;s a bit unfortunate for
&gt; &gt; the OP of this bug though...
&gt; 
&gt; Should we maybe fork this bug and keep this open for Apple folks to actually
&gt; move it over to public and provide the Obj C interface then?

I guess it might be nice for people that are already tracking this bug. We probably shouldn&apos;t close this bug at least until we have nailed down an API everyone is happy with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564518</commentid>
    <comment_count>50</comment_count>
      <attachid>377136</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-23 11:19:14 -0700</bug_when>
    <thetext>Created attachment 377136
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564542</commentid>
    <comment_count>51</comment_count>
      <attachid>377136</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-23 11:51:26 -0700</bug_when>
    <thetext>Comment on attachment 377136
Patch for landing

Clearing flags on attachment: 377136

Committed r249058: &lt;https://trac.webkit.org/changeset/249058&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564543</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-23 11:51:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564557</commentid>
    <comment_count>53</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-23 12:18:36 -0700</bug_when>
    <thetext>Reopening until we have an ObjC API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568664</commentid>
    <comment_count>54</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2019-09-06 13:35:56 -0700</bug_when>
    <thetext>Wait, is this actually a public API? It looks like it&apos;s SPI?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568691</commentid>
    <comment_count>55</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-06 14:09:51 -0700</bug_when>
    <thetext>(In reply to Oliver Hunt from comment #54)
&gt; Wait, is this actually a public API? It looks like it&apos;s SPI?

it&apos;s SPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568692</commentid>
    <comment_count>56</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-09-06 14:13:28 -0700</bug_when>
    <thetext>(In reply to Oliver Hunt from comment #54)
&gt; Wait, is this actually a public API? It looks like it&apos;s SPI?

Sorry about the confusion -- the title of this bug (which is still open) is accurate but the title of the patch that has been landed is not... :(

(I wonder if it would be worth having the wording in the blog post updated?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594437</commentid>
    <comment_count>57</comment_count>
    <who name="Michael Anthony">michael</who>
    <bug_when>2019-12-01 12:24:21 -0800</bug_when>
    <thetext>This has been sitting for quite awhile with no resolution to the ObjC API. Should I open a new bug because this thread now has a patch (which doesn&apos;t solve the original issue)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594703</commentid>
    <comment_count>58</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-12-02 10:59:17 -0800</bug_when>
    <thetext>(In reply to Michael Anthony from comment #57)
&gt; This has been sitting for quite awhile with no resolution to the ObjC API.
&gt; Should I open a new bug because this thread now has a patch (which doesn&apos;t
&gt; solve the original issue)?

We decided to leave this open until the original issue is in fact fully resolved (comment 49), though a new patch could certainly be submitted in a dependent bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2059170</commentid>
    <comment_count>59</comment_count>
    <who name="Cheng Runfeng">canymebee</who>
    <bug_when>2024-09-10 20:23:03 -0700</bug_when>
    <thetext>So 5 years has gone, where is the public api?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369669</attachid>
            <date>2019-05-12 00:09:41 -0700</date>
            <delta_ts>2019-07-05 20:27:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197172-20190512000940.patch</filename>
            <type>text/plain</type>
            <size>18125</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
M2VjYjY2Y2FiZDg0NGNkMTlhMTMyY2M5MzhlMTZlZDQ4YTYyMjM0Li41NmMwYTVkNWM2OTI4Mjg0
M2Y2YzMyYzIyNzVmMTIxMjRkODg4NmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxOS0wNS0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFVuY2F1Z2h0IFByb21pc2UgRXhjZXB0aW9ucyBpbiBKYXZhU2NyaXB0Q29y
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTcy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVu
Y0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpkaWRNaWNyb3Rhc2tR
dWV1ZUV4aGF1c3RlZCk6CisgICAgICAgIChKU0M6OlZNOjpkcmFpbk1pY3JvdGFza3MpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxOS0wNS0xMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBDYWxsIHRvIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0
cnVjdHVyZSBwYXNzZXMgaW4gd3JvbmcgcHJvdG90eXBlIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhh
ZGI0MjBhZjgwODhlMzhiMTI2ZDFhNzc0NjlhOWI5MmJjNjBjNC4uNjI3NjFjMmQ4MGUzYWQ5MWJh
MGJjMTFkYzU4Yjg1M2QyMDQ5ZTAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE5
LTA1LTEyICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgVW5j
YXVnaHQgUHJvbWlzZSBFeGNlcHRpb25zIGluIEphdmFTY3JpcHRDb3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxNzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNFeGVjU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNFeGVjU3RhdGU6OmRpZExlYXZlU2NyaXB0Q29udGV4dCk6CisgICAgICAgICogZG9tL1JlamVj
dGVkUHJvbWlzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVqZWN0ZWRQcm9taXNl
VHJhY2tlcjo6UmVqZWN0ZWRQcm9taXNlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpSZWpl
Y3RlZFByb21pc2VUcmFja2VyOjpwcm9taXNlUmVqZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cHJvbWlzZUhhbmRsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cHJvY2Vzc1F1ZXVlU29vbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZWplY3RlZFByb21pc2VUcmFja2VyOjpyZXBvcnRVbmhhbmRsZWRSZWplY3Rpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnJlcG9ydFJlamVj
dGlvbkhhbmRsZWQpOgorICAgICAgICAqIGRvbS9SZWplY3RlZFByb21pc2VUcmFja2VyLmg6Cisg
ICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZW5zdXJlUmVqZWN0ZWRQcm9taXNlVHJhY2tlclNs
b3cpOgorCiAyMDE5LTA1LTEwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBIHNlcnZpY2Ugd29ya2VyIGluc3RhbmNlIHNob3VsZCBiZSB0ZXJtaW5hdGVkIHdo
ZW4gaXRzIFNXU2VydmVyIGlzIGRlc3Ryb3llZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4IDRjMzcy
ODUzMDY3OTg2NDI0MTgxMTdiZTY5YTMxNmIwZmMxNWYyOWQuLjYyOGY0ZDk3MjE3NWZhMzYxNGEx
NjQ2ZjM4Y2IxODgzNjllZTE2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTc2MSwxMCArNzYx
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0hvc3RQcm9taXNl
UmVqZWN0aW9uVHJhY2tlcihFeGVjU3RhdGUqIGV4CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IGlmICghZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVq
ZWN0aW9uVHJhY2tlcikKKyAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNl
Kj4oZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgLy8gSW50ZXJuYWxQcm9taXNlcyBzaG91bGQg
bm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3JpcHRzLgorICAgIGlmIChwcm9taXNlLT5pbmhlcml0
czxKU0ludGVybmFsUHJvbWlzZT4odm0pKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCi0gICAgSlNQcm9taXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJv
bWlzZSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBKU1ZhbHVlIG9wZXJhdGlvblZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMSk7CiAKICAgICBBU1NFUlQob3BlcmF0aW9uVmFsdWUuaXNOdW1iZXIo
KSk7CkBAIC03NzIsOCArNzc0LDMyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcihFeGVjU3RhdGUqIGV4CiAgICAgQVNT
RVJUKG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdCB8fCBv
cGVyYXRpb24gPT0gSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGUpOwogICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAKLSAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKGdsb2JhbE9iamVjdCwgZXhl
YywgcHJvbWlzZSwgb3BlcmF0aW9uKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnBy
b21pc2VSZWplY3Rpb25UcmFja2VyKSB7CisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBl
eGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIChbJl0geworICAgICAgICAgICAgc3dp
dGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAgICAgIGNhc2UgSlNQcm9taXNlUmVqZWN0aW9uT3Bl
cmF0aW9uOjpSZWplY3Q6IHsKKyAgICAgICAgICAgICAgICB2bS5tX2Fib3V0VG9CZU5vdGlmaWVk
UmVqZWN0ZWRQcm9taXNlcy5jb25zdHJ1Y3RBbmRBcHBlbmQodm0sIHByb21pc2UpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSlNQcm9t
aXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGU6IHsKKyAgICAgICAgICAgICAgICBib29sIHJl
bW92ZWQgPSB2bS5tX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcy5yZW1vdmVGaXJz
dE1hdGNoaW5nKFsmXSAoU3Ryb25nPEpTUHJvbWlzZT4mIHVuaGFuZGxlZFByb21pc2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaGFuZGxlZFByb21pc2UuZ2V0KCkgPT0gcHJvbWlz
ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKCF2bS5tX291
dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlcy5yZW1vdmUocHJvbWlzZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIHZtLm1fcmVqZWN0ZWRQcm9taXNlcy5j
b25zdHJ1Y3RBbmRBcHBlbmQodm0sIHByb21pc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSgpKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGE2MzAxMTZjYzJjYTAyNzQwNGIwMDE4MGYwYTY1NDlh
ODY3NGVjOGIuLjA1ZWVkMTMxYjY1MDU4N2IxNjBjMzU3MzM1NTZjMDc4ZDM1OWNjMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTMyMSw2ICszMjEsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3R5cGVQcm9maWxlckVu
YWJsZWRDb3VudCgwKQogICAgICwgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoSXNXYXRjaGVk
KQogICAgICwgbV9jb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZENvdW50KDApCisgICAgLCBtX291
dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlcygqdGhpcykKIHsKICAgICBpZiAoVU5MSUtFTFkodm1D
cmVhdGlvblNob3VsZENyYXNoKSkKICAgICAgICAgQ1JBU0hfV0lUSF9JTkZPKDB4NDI0MjQyNDIy
MDIwMjAyMCwgMHhiYWRiZWVmMGJhZGJlZWYsIDB4MTIzNDEyMzQxMjM0MTIzNCwgMHgxMzM3MTMz
NzEzMzcxMzM3KTsKQEAgLTEwOTUsMTUgKzEwOTYsNDAgQEAgdm9pZCBWTTo6cXVldWVNaWNyb3Rh
c2soSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPE1pY3JvdGFzaz4mJiB0YXNrKQog
ICAgIG1fbWljcm90YXNrUXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UXVldWVkVGFzaz4o
KnRoaXMsICZnbG9iYWxPYmplY3QsIFdURk1vdmUodGFzaykpKTsKIH0KIAotdm9pZCBWTTo6ZHJh
aW5NaWNyb3Rhc2tzKCkKKworaW5saW5lIHZvaWQgVk06OmRpZE1pY3JvdGFza1F1ZXVlRXhoYXVz
dGVkKCkKIHsKLSAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fbWljcm90YXNrUXVldWUudGFrZUZpcnN0KCktPnJ1bigpOwotICAgICAgICBpZiAobV9v
bkVhY2hNaWNyb3Rhc2tUaWNrKQotICAgICAgICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNrKCp0
aGlzKTsKKyAgICBhdXRvIHJlamVjdGVkUHJvbWlzZXMgPSBXVEZNb3ZlKG1fcmVqZWN0ZWRQcm9t
aXNlcyk7CisgICAgZm9yIChhdXRvJiBwcm9taXNlIDogcmVqZWN0ZWRQcm9taXNlcykKKyAgICAg
ICAgZGF0YUxvZ0xuKEpTVmFsdWUocHJvbWlzZS5nZXQoKSkpOworCisgICAgYXV0byB1bmhhbmRs
ZWRQcm9taXNlcyA9IFdURk1vdmUobV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMp
OworICAgIGZvciAoYXV0byYgcHJvbWlzZSA6IHVuaGFuZGxlZFByb21pc2VzKSB7CisgICAgICAg
IEV4ZWNTdGF0ZSogc3RhdGUgPSBwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OworICAgICAgICBpZiAocHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGRhdGFMb2dMbihKU1ZhbHVlKHByb21pc2UuZ2V0KCkpKTsKKwor
ICAgICAgICAvLyBtX2NvbnRleHQucmVwb3J0VW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbihzdGF0
ZSwgcHJvbWlzZSwgdW5oYW5kbGVkUHJvbWlzZS5jYWxsU3RhY2soKSk7CisKKyAgICAgICAgaWYg
KCFwcm9taXNlLT5pc0hhbmRsZWQoKnRoaXMpKQorICAgICAgICAgICAgbV9vdXRzdGFuZGluZ1Jl
amVjdGVkUHJvbWlzZXMuc2V0KHByb21pc2UuZ2V0KCksIHByb21pc2UuZ2V0KCkpOwogICAgIH0K
IH0KIAordm9pZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkKK3sKKyAgICBkbyB7CisgICAgICAgIHdo
aWxlICghbV9taWNyb3Rhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbWljcm90
YXNrUXVldWUudGFrZUZpcnN0KCktPnJ1bigpOworICAgICAgICAgICAgaWYgKG1fb25FYWNoTWlj
cm90YXNrVGljaykKKyAgICAgICAgICAgICAgICBtX29uRWFjaE1pY3JvdGFza1RpY2soKnRoaXMp
OworICAgICAgICB9CisgICAgICAgIGRpZE1pY3JvdGFza1F1ZXVlRXhoYXVzdGVkKCk7CisgICAg
fSB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKTsKK30KKwogdm9pZCBRdWV1ZWRU
YXNrOjpydW4oKQogewogICAgIG1fbWljcm90YXNrLT5ydW4obV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBiOTg1ZDQ3ZWE0ZDk1
ZWRkZGM5YzBjZjM2Njg5NjUzMzc2ZjdkMWRmLi4wMDZhZTY5YzBmMzgxYTgzNDFkZjYwZDk3NmZl
OTNjNjQyODdmMTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEyMyw2ICsx
MjMsNyBAQCBjbGFzcyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOwogY2xhc3MgSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNz
IEpTT2JqZWN0OworY2xhc3MgSlNQcm9taXNlOwogY2xhc3MgSlNSdW5Mb29wVGltZXI7CiBjbGFz
cyBKU1N0cmluZ0hlYXBDZWxsVHlwZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGU7CkBAIC04MDcsNiArODA4LDEwIEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAg
QUxXQVlTX0lOTElORSBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNPd25Qcm9wZXJ0eUNhY2hlKCkg
eyByZXR1cm4gbV9oYXNPd25Qcm9wZXJ0eUNhY2hlLmdldCgpOyB9CiAgICAgSGFzT3duUHJvcGVy
dHlDYWNoZSogZW5zdXJlSGFzT3duUHJvcGVydHlDYWNoZSgpOwogCisgICAgVmVjdG9yPFN0cm9u
ZzxKU1Byb21pc2U+PiBtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlczsKKyAgICBW
ZWN0b3I8U3Ryb25nPEpTUHJvbWlzZT4+IG1fcmVqZWN0ZWRQcm9taXNlczsKKyAgICBXZWFrR0NN
YXA8SlNQcm9taXNlKiwgSlNQcm9taXNlPiBtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlczsK
KwogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJl
Z0V4cCo+IFJUVHJhY2VMaXN0OwogICAgIFJUVHJhY2VMaXN0KiBtX3J0VHJhY2VMaXN0OwpAQCAt
OTgxLDYgKzk4Niw4IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZN
PiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgc3RhdGljIHZvaWQgcHJp
bWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKICAgICB2b2lkIHByaW1pdGl2
ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIAorICAgIHZvaWQgZGlkTWljcm90YXNrUXVldWVFeGhhdXN0
ZWQoKTsKKwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIGNvbnN0IENsYXNzSW5mbyog
bV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDc4OGUyZTY3N2Y3ZjIwY2Qz
OWQyMTcxMmNmODY3NDYwYjU2ZjViNGIuLjYyOGZiZDY4MGQ4YWUyZjNlZTg4MGYzYzNlMzkwMTkz
YTRlNTNmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5jcHAKQEAgLTIyMiwxOSArMjIyLDE1IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6
OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEludGVybmFsUHJv
bWlzZXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHVzZXIgc2NyaXB0cy4KLSAgICBpZiAoSlND
Ojpqc0R5bmFtaWNDYXN0PEpTQzo6SlNJbnRlcm5hbFByb21pc2UqPih2bSwgcHJvbWlzZSkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHQgaGFzIG11dGVkIGVycm9y
cyAoY3Jvc3Mgb3JpZ2luKSwgdGVybWluYXRlIHRoZXNlIHN0ZXBzLgogICAgIC8vIDxodHRwczov
L3dlYmtpdC5vcmcvYi8xNzE0MTU+IEltcGxlbWVudCB0aGUgYG11dGVkLWVycm9yc2AgcHJvcGVy
dHkgb2YgU2NyaXB0cyB0byBhdm9pZCBvbmVycm9yL29udW5oYW5kbGVkcmVqZWN0aW9uIGZvciBj
cm9zcy1vcmlnaW4gc2NyaXB0cwogCiAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKICAgICBjYXNl
IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0OgotICAgICAgICBjb250ZXh0LT5l
bnN1cmVSZWplY3RlZFByb21pc2VUcmFja2VyKCkucHJvbWlzZVJlamVjdGVkKCpleGVjLCBnbG9i
YWxPYmplY3QsICpwcm9taXNlKTsKKyAgICAgICAgY29udGV4dC0+ZW5zdXJlUmVqZWN0ZWRQcm9t
aXNlVHJhY2tlcigpLnByb21pc2VSZWplY3RlZCgqY29udGV4dCwgKmV4ZWMsIGdsb2JhbE9iamVj
dCwgKnByb21pc2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpTUHJvbWlzZVJlamVjdGlv
bk9wZXJhdGlvbjo6SGFuZGxlOgotICAgICAgICBjb250ZXh0LT5lbnN1cmVSZWplY3RlZFByb21p
c2VUcmFja2VyKCkucHJvbWlzZUhhbmRsZWQoKmV4ZWMsIGdsb2JhbE9iamVjdCwgKnByb21pc2Up
OworICAgICAgICBjb250ZXh0LT5lbnN1cmVSZWplY3RlZFByb21pc2VUcmFja2VyKCkucHJvbWlz
ZUhhbmRsZWQoKmNvbnRleHQsICpleGVjLCBnbG9iYWxPYmplY3QsICpwcm9taXNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFeGVjU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeGVjU3Rh
dGUuY3BwCmluZGV4IDIwZGQyNTU4MTZjMGY3MmQxYjlhNjNmNWZhZjM4N2JkMGUxYTk4N2EuLjQw
OTU0YzQ3ZmU5NTU2M2MxM2I0NjA0ZmVlNTAyOTEzZGFiNzc1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhlY1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V4ZWNTdGF0ZS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBKU0V4
ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIE1pY3JvdGFza1F1ZXVlOjpjb250
ZXh0UXVldWUoKmNvbnRleHQpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7Ci0gICAgY29u
dGV4dC0+ZW5zdXJlUmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpLnByb2Nlc3NRdWV1ZVNvb24oKTsK
KyAgICBjb250ZXh0LT5lbnN1cmVSZWplY3RlZFByb21pc2VUcmFja2VyKCkucHJvY2Vzc1F1ZXVl
U29vbigqY29udGV4dCk7CiB9CiAKIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVyRnJv
bUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0
YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtl
ZFB0cjxKU0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1JlamVjdGVkUHJvbWlzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JlamVjdGVkUHJvbWlzZVRyYWNrZXIuY3BwCmluZGV4IGFiNzczMDZmMjdmMzM2Yzdl
NGU4OWZmODgyMWU1OTcxM2NlNzk4MDUuLjVmNWJlMGZmNWIzMTI0OTgwYzY3NzAyZmUwZTY1ZjI1
YTQyZWQ0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWplY3RlZFByb21pc2VU
cmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVqZWN0ZWRQcm9taXNlVHJhY2tl
ci5jcHAKQEAgLTc3LDkgKzc3LDggQEAgY2xhc3MgVW5oYW5kbGVkUHJvbWlzZSB7CiB9OwogCiAK
LVJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OlJlamVjdGVkUHJvbWlzZVRyYWNrZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgSlNDOjpWTSYgdm0pCi0gICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fb3V0c3RhbmRpbmdSZWplY3RlZFByb21pc2VzKHZtKQorUmVqZWN0ZWRQ
cm9taXNlVHJhY2tlcjo6UmVqZWN0ZWRQcm9taXNlVHJhY2tlcihKU0M6OlZNJiB2bSkKKyAgICA6
IG1fb3V0c3RhbmRpbmdSZWplY3RlZFByb21pc2VzKHZtKQogewogfQogCkBAIC0xMDIsNyArMTAx
LDcgQEAgc3RhdGljIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFj
a0Zyb21SZWFzb24oRXhlY1N0YXRlJiBzdGF0ZSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
dm9pZCBSZWplY3RlZFByb21pc2VUcmFja2VyOjpwcm9taXNlUmVqZWN0ZWQoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlJiBwcm9taXNl
KQordm9pZCBSZWplY3RlZFByb21pc2VUcmFja2VyOjpwcm9taXNlUmVqZWN0ZWQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlJiBwcm9taXNlKQogewogICAgIC8vIGh0dHBzOi8v
aHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHBy
b21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0aW9uCiAKQEAgLTExMCw3ICsxMDksNyBA
QCB2b2lkIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnByb21pc2VSZWplY3RlZChFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdAogICAgIG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3Rl
ZFByb21pc2VzLmFwcGVuZChVbmhhbmRsZWRQcm9taXNlIHsgZ2xvYmFsT2JqZWN0LCBwcm9taXNl
LCBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tUmVhc29uKHN0YXRlLCByZWFzb24pIH0pOwogfQog
Ci12b2lkIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnByb21pc2VIYW5kbGVkKEV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZSYgcHJvbWlzZSkKK3Zv
aWQgUmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cHJvbWlzZUhhbmRsZWQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgRXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNQcm9taXNlJiBwcm9taXNlKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rp
b250cmFja2VyLWltcGxlbWVudGF0aW9uCiAKQEAgLTEyNiwxMiArMTI1LDEyIEBAIHZvaWQgUmVq
ZWN0ZWRQcm9taXNlVHJhY2tlcjo6cHJvbWlzZUhhbmRsZWQoRXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhCiAgICAgaWYgKCFtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlcy5y
ZW1vdmUoJnByb21pc2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRleHQucG9zdFRh
c2soW3RoaXMsIHJlamVjdGVkUHJvbWlzZSA9IERPTVByb21pc2U6OmNyZWF0ZShnbG9iYWxPYmpl
Y3QsIHByb21pc2UpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIG11dGFibGUgewotICAgICAg
ICByZXBvcnRSZWplY3Rpb25IYW5kbGVkKFdURk1vdmUocmVqZWN0ZWRQcm9taXNlKSk7CisgICAg
Y29udGV4dC5wb3N0VGFzayhbdGhpcywgcmVqZWN0ZWRQcm9taXNlID0gRE9NUHJvbWlzZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdCwgcHJvbWlzZSldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgcmVwb3J0UmVqZWN0aW9uSGFuZGxlZChjb250ZXh0LCBX
VEZNb3ZlKHJlamVjdGVkUHJvbWlzZSkpOwogICAgIH0pOwogfQogCi12b2lkIFJlamVjdGVkUHJv
bWlzZVRyYWNrZXI6OnByb2Nlc3NRdWV1ZVNvb24oKQordm9pZCBSZWplY3RlZFByb21pc2VUcmFj
a2VyOjpwcm9jZXNzUXVldWVTb29uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7
CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBp
cy5odG1sI25vdGlmeS1hYm91dC1yZWplY3RlZC1wcm9taXNlcwogCkBAIC0xMzksMTYgKzEzOCwx
NiBAQCB2b2lkIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnByb2Nlc3NRdWV1ZVNvb24oKQogICAg
ICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8VW5oYW5kbGVkUHJvbWlzZT4gaXRlbXMgPSBXVEZN
b3ZlKG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzKTsKLSAgICBtX2NvbnRleHQu
cG9zdFRhc2soW3RoaXMsIGl0ZW1zID0gV1RGTW92ZShpdGVtcyldIChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JikgbXV0YWJsZSB7Ci0gICAgICAgIHJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnMoV1RG
TW92ZShpdGVtcykpOworICAgIGNvbnRleHQucG9zdFRhc2soW3RoaXMsIGl0ZW1zID0gV1RGTW92
ZShpdGVtcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAg
ICAgICAgcmVwb3J0VW5oYW5kbGVkUmVqZWN0aW9ucyhjb250ZXh0LCBXVEZNb3ZlKGl0ZW1zKSk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgUmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cmVwb3J0VW5oYW5k
bGVkUmVqZWN0aW9ucyhWZWN0b3I8VW5oYW5kbGVkUHJvbWlzZT4mJiB1bmhhbmRsZWRQcm9taXNl
cykKK3ZvaWQgUmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cmVwb3J0VW5oYW5kbGVkUmVqZWN0aW9u
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBWZWN0b3I8VW5oYW5kbGVkUHJvbWlz
ZT4mJiB1bmhhbmRsZWRQcm9taXNlcykKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdW5oYW5kbGVkLXByb21pc2UtcmVqZWN0
aW9ucwogCi0gICAgVk0mIHZtID0gbV9jb250ZXh0LnZtKCk7CisgICAgVk0mIHZtID0gY29udGV4
dC52bSgpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgZm9yIChhdXRv
JiB1bmhhbmRsZWRQcm9taXNlIDogdW5oYW5kbGVkUHJvbWlzZXMpIHsKQEAgLTE2NywyMiArMTY2
LDIyIEBAIHZvaWQgUmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cmVwb3J0VW5oYW5kbGVkUmVqZWN0
aW9ucyhWZWN0b3I8VW5oYW5kbGVkUHJvbWlzZT4mCiAgICAgICAgIGluaXRpYWxpemVyLnJlYXNv
biA9IHByb21pc2UucmVzdWx0KHZtKTsKIAogICAgICAgICBhdXRvIGV2ZW50ID0gUHJvbWlzZVJl
amVjdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVuaGFuZGxlZHJlamVjdGlvbkV2ZW50
LCBpbml0aWFsaXplcik7Ci0gICAgICAgIGF1dG8gdGFyZ2V0ID0gbV9jb250ZXh0LmVycm9yRXZl
bnRUYXJnZXQoKTsKKyAgICAgICAgYXV0byB0YXJnZXQgPSBjb250ZXh0LmVycm9yRXZlbnRUYXJn
ZXQoKTsKICAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIAogICAgICAgICBp
ZiAoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCi0gICAgICAgICAgICBtX2NvbnRleHQucmVw
b3J0VW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbihzdGF0ZSwgcHJvbWlzZSwgdW5oYW5kbGVkUHJv
bWlzZS5jYWxsU3RhY2soKSk7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydFVuaGFuZGxlZFBy
b21pc2VSZWplY3Rpb24oc3RhdGUsIHByb21pc2UsIHVuaGFuZGxlZFByb21pc2UuY2FsbFN0YWNr
KCkpOwogCiAgICAgICAgIGlmICghcHJvbWlzZS5pc0hhbmRsZWQodm0pKQogICAgICAgICAgICAg
bV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMuc2V0KCZwcm9taXNlLCAmcHJvbWlzZSk7CiAg
ICAgfQogfQogCi12b2lkIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnJlcG9ydFJlamVjdGlvbkhh
bmRsZWQoUmVmPERPTVByb21pc2U+JiYgcmVqZWN0ZWRQcm9taXNlKQordm9pZCBSZWplY3RlZFBy
b21pc2VUcmFja2VyOjpyZXBvcnRSZWplY3Rpb25IYW5kbGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIFJlZjxET01Qcm9taXNlPiYmIHJlamVjdGVkUHJvbWlzZSkKIHsKICAgICAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwj
dGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1pbXBsZW1lbnRhdGlvbgogCi0gICAgVk0m
IHZtID0gbV9jb250ZXh0LnZtKCk7CisgICAgVk0mIHZtID0gY29udGV4dC52bSgpOwogICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgaWYgKHJlamVjdGVkUHJvbWlzZS0+aXNT
dXNwZW5kZWQoKSkKQEAgLTE5NSw3ICsxOTQsNyBAQCB2b2lkIFJlamVjdGVkUHJvbWlzZVRyYWNr
ZXI6OnJlcG9ydFJlamVjdGlvbkhhbmRsZWQoUmVmPERPTVByb21pc2U+JiYgcmVqZWN0ZWRQcgog
ICAgIGluaXRpYWxpemVyLnJlYXNvbiA9IHByb21pc2UucmVzdWx0KHZtKTsKIAogICAgIGF1dG8g
ZXZlbnQgPSBQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVqZWN0
aW9uaGFuZGxlZEV2ZW50LCBpbml0aWFsaXplcik7Ci0gICAgYXV0byB0YXJnZXQgPSBtX2NvbnRl
eHQuZXJyb3JFdmVudFRhcmdldCgpOworICAgIGF1dG8gdGFyZ2V0ID0gY29udGV4dC5lcnJvckV2
ZW50VGFyZ2V0KCk7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlamVjdGVkUHJvbWlzZVRyYWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SZWplY3RlZFByb21pc2VUcmFja2VyLmgKaW5kZXggODdmZDU1NmJm
YzU4NWI5NzgyMDIxNGNjOTQ0YWRhYjBjMWRiMDRlNC4uY2EwM2FiOTYwMDJhY2JlZTI1YjM2MjFl
ODI5YzhkMWVhM2UxNzk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JlamVjdGVk
UHJvbWlzZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVqZWN0ZWRQcm9taXNl
VHJhY2tlci5oCkBAIC00NywxOSArNDcsMTggQEAgY2xhc3MgUmVqZWN0ZWRQcm9taXNlVHJhY2tl
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUmVqZWN0ZWRQcm9taXNlVHJhY2tlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVqZWN0
ZWRQcm9taXNlVHJhY2tlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSlNDOjpWTSYpOworICAg
IGV4cGxpY2l0IFJlamVjdGVkUHJvbWlzZVRyYWNrZXIoSlNDOjpWTSYpOwogICAgIH5SZWplY3Rl
ZFByb21pc2VUcmFja2VyKCk7CiAKLSAgICB2b2lkIHByb21pc2VSZWplY3RlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2UmKTsKLSAgICB2b2lkIHBy
b21pc2VIYW5kbGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpT
UHJvbWlzZSYpOworICAgIHZvaWQgcHJvbWlzZVJlamVjdGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2Um
KTsKKyAgICB2b2lkIHByb21pc2VIYW5kbGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2UmKTsKIAotICAg
IHZvaWQgcHJvY2Vzc1F1ZXVlU29vbigpOworICAgIHZvaWQgcHJvY2Vzc1F1ZXVlU29vbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCByZXBvcnRVbmhhbmRs
ZWRSZWplY3Rpb25zKFZlY3RvcjxVbmhhbmRsZWRQcm9taXNlPiYmKTsKLSAgICB2b2lkIHJlcG9y
dFJlamVjdGlvbkhhbmRsZWQoUmVmPERPTVByb21pc2U+JiYpOworICAgIHZvaWQgcmVwb3J0VW5o
YW5kbGVkUmVqZWN0aW9ucyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVmVjdG9yPFVuaGFuZGxl
ZFByb21pc2U+JiYpOworICAgIHZvaWQgcmVwb3J0UmVqZWN0aW9uSGFuZGxlZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgUmVmPERPTVByb21pc2U+JiYpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgbV9jb250ZXh0OwogICAgIFZlY3RvcjxVbmhhbmRsZWRQcm9taXNlPiBtX2Fib3V0
VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlczsKICAgICBKU0M6OldlYWtHQ01hcDxKU0M6OkpT
UHJvbWlzZSosIEpTQzo6SlNQcm9taXNlPiBtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlczsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5k
ZXggMjYxYmFkODA5OTlhYzZhNWI5NzEyMWJhMzIxM2FhZWUwOTMxYmI2Zi4uYzg3ODQzYWY2ODcz
MjI4NDE0ZDI1NDY0YzNkMDMzZDFiZDE5YWI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIFJlamVjdGVkUHJv
bWlzZVRyYWNrZXImIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmVuc3VyZVJlamVjdGVkUHJvbWlz
ZVRyYWNrZXJTbG93CiAgICAgLy8gV2hlbiBpbml0aWFsaXppbmcgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgdm0oKSBpcyBub3QgcmVhZHkuCiAKICAgICBBU1NFUlQoIW1fcmVqZWN0ZWRQcm9taXNl
VHJhY2tlcik7Ci0gICAgbV9yZWplY3RlZFByb21pc2VUcmFja2VyID0gc3RkOjptYWtlX3VuaXF1
ZTxSZWplY3RlZFByb21pc2VUcmFja2VyPigqdGhpcywgdm0oKSk7CisgICAgbV9yZWplY3RlZFBy
b21pc2VUcmFja2VyID0gc3RkOjptYWtlX3VuaXF1ZTxSZWplY3RlZFByb21pc2VUcmFja2VyPih2
bSgpKTsKICAgICByZXR1cm4gKm1fcmVqZWN0ZWRQcm9taXNlVHJhY2tlci5nZXQoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373561</attachid>
            <date>2019-07-05 20:27:19 -0700</date>
            <delta_ts>2019-07-05 22:23:38 -0700</delta_ts>
            <desc>Finish Yusuke&apos;s PoC</desc>
            <filename>bug-197172-20190705202718.patch</filename>
            <type>text/plain</type>
            <size>22180</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ODc2NWZlZjBlY2Q0MTJkYmZlZmJiZDZhNTFhOTc2YzEwYjA0ZDQ5Li4wOWU4NzcyYWRlODg2ZGU1
NzZhYmI5NzdmMjI2Mjg2MDk1M2MyZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAxOS0wNy0wNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgVW5jYXVnaHQgUHJvbWlzZSBFeGNlcHRpb25zIGluIEphdmFTY3Jp
cHRDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTcxNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFsbG93cyBjYWxsYmFja3MgZm9yIHVuaGFuZGxlZCBhbmQgbGF0ZS1oYW5kbGVk
IHByb21pc2UgcmVqZWN0aW9ucyB0byBiZSBzZXQgdmlhIEpTQydzIHB1YmxpYyBDIEFQSS4KKyAg
ICAgICAgU2luY2UgdGhlcmUgaXMgbm8gZXZlbnQgbG9vcCBpbiBzdWNoIGFuIGVudmlyb25tZW50
LCB0aGVzZSBjYWxsYmFja3MgZmlyZSBvZmYgb2YgdGhlIG1pY3JvdGFzayBxdWV1ZS4KKyAgICAg
ICAgQ2FsbGJhY2tzIHJlY2VpdmUgdGhlIHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMg
YXJndW1lbnRzIGFuZCB0aGVpciByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KKworICAgICAgICAq
IEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0UmVqZWN0
aW9uSGFuZGxlZENhbGxiYWNrKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmg6CisgICAg
ICAgIEFkZCBuZXcgcHVibGljIEFQSXMuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5j
cHA6CisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVzb2x2ZVRydWUpOiBDbGVhbiB1cCB0ZXN0
IG91dHB1dC4gCisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSk6IENsZWFuIHVw
IHRlc3Qgb3V0cHV0LgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlzZVJlamVjdGlvbkNhbGxiYWNr
cyk6IEFkZGVkLgorICAgICAgICAodGVzdENBUElWaWFDcHApOgorICAgICAgICBBZGQgbmV3IEMr
KyBBUEkgdGVzdC4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9u
Q2FsbGJhY2spOgorICAgICAgICAoZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2sp
OgorICAgICAgICBBZGQgY29ycmVzcG9uZGluZyBnbG9iYWxzIHRvIEpTQyBzaGVsbC4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayk6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2sgY29uc3Qp
OgorICAgICAgICBLZWVwIHN0cm9uZyByZWZlcmVuY2VzIHRvIHRoZSBjYWxsYmFja3MuCisKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAgICAgIEFkZCBk
ZWZhdWx0IGJlaGF2aW9yIChiYXNlZCBvbiBwcm9taXNlUmVqZWN0ZWQgYW5kIHByb21pc2VIYW5k
bGVkIGluIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIpLgorCisgICAgICAgICogcnVudGltZS9WTS5j
cHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpjYWxsUHJvbWlz
ZVJlamVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6Vk06OmRpZEV4aGF1c3RNaWNyb3Rh
c2tRdWV1ZSk6CisgICAgICAgIChKU0M6OlZNOjpkcmFpbk1pY3JvdGFza3MpOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgU3RvcmUgcmVqZWN0aW9ucyBvZiB2YXJpb3VzIHN0YXRl
cyAodGhlc2UgY29sbGVjdGlvbnMgd2lsbCBhbHdheXMgYmUgZW1wdHkgaW4gdGhlIHByZXNlbmNl
IG9mIFdlYkNvcmUpLgorICAgICAgICBXaGVuIG1pY3JvdGFzayBxdWV1ZSBpcyBleGhhdXN0ZWQs
IGRlYWwgd2l0aCBhbnkgcGVuZGluZyB1bmhhbmRsZWQgLyBsYXRlLWhhbmRsZWQgcmVqZWN0aW9u
cywKKyAgICAgICAgdGhlbiBtYWtlIHN1cmUgdGhpcyBkaWRuJ3QgY2F1c2UgYW55dGhpbmcgbmV3
IG1pY3JvdGFza3MgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLiAKKwogMjAxOS0wNy0wNSAgQWxl
eGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gQ2xl
YW4gdXAgQXJyYXlTcGVjaWVzQ3JlYXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTMxMjIxZmU3ZjZhZDlkZDdi
YjFiMmZjMDA3OGM2ODM4YjU2ZjZhZS4uYmQ5ZjVkMzY2YTEyZDg0Y2I4NzgyYTU5MmRlMjI4ODc3
NDA0NjA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA3LTA1ICBSb3NzIEtp
cnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBVbmNhdWdodCBQcm9t
aXNlIEV4Y2VwdGlvbnMgaW4gSmF2YVNjcmlwdENvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rp
b25UcmFja2VyKToKKyAgICAgICAgTW92ZSBKU0ludGVybmFsUHJvbWlzZSBlYXJseS1vdXQgdG8g
SlNDIHNpZGUuCisKIDIwMTktMDctMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBmZXRjaCBxdWlyayBmb3Igd3d3LmJuei5jby5uegpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCmluZGV4IDlmNWZkYWZjNzgxOTZmZTQ0
OGMxOGQwNzkxNWUwNGZhMzg2ODRhYWEuLjcyZDAwZTM5ODQwNzRiMDYwOGU3NGExNGQ0YWQ2NjQw
ZjljNzk0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU291
cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJv
bmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjQ5
LDYgKzI1MCw0NyBAQCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldE5hbWUoSlNHbG9iYWxDb250ZXh0
UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSkKICAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4
ZWMpLT5zZXROYW1lKG5hbWUgPyBuYW1lLT5zdHJpbmcoKSA6IFN0cmluZygpKTsKIH0KIAordm9p
ZCBKU0dsb2JhbENvbnRleHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhKU0dsb2JhbENv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIWN0eCkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMoZnVuY3Rp
b24pOworICAgIGlmICghanNPYmplY3QtPmlzRnVuY3Rpb24odm0pKSB7CisgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGpzT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNHbG9iYWxD
b250ZXh0U2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uKQoreworICAgIGlmICghY3R4KSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhmdW5jdGlvbik7CisgICAgaWYg
KCFqc09iamVjdC0+aXNGdW5jdGlvbih2bSkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm0udm1FbnRyeUdsb2Jh
bE9iamVjdChleGVjKS0+c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKHZtLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGpzT2JqZWN0KSk7Cit9CiAKIGNsYXNzIEJhY2t0cmFjZUZ1bmN0b3IgewogcHVi
bGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgKaW5kZXggMWNlNzQz
NTgwNGViYjliYzQ3ZjdjMWYwZDllOTRmYzA3ODk4OGMwYi4uODM1NWZjYzFhOGM0M2VlOGYxMjAy
ZDU1YTBhMGRlOWRhMGM2NTE1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5oCkBAIC0xNTYsNiArMTU2LDI0IEBAIEpTX0VYUE9SVCBKU1N0cmluZ1JlZiBKU0dsb2Jh
bENvbnRleHRDb3B5TmFtZShKU0dsb2JhbENvbnRleHRSZWYgY3R4KSBKU0NfQVBJX0FWCiAqLwog
SlNfRVhQT1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0TmFtZShKU0dsb2JhbENvbnRleHRSZWYg
Y3R4LCBKU1N0cmluZ1JlZiBuYW1lKSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlv
cyg4LjApKTsKIAorLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCBTZXRzIHRoZSAidW5oYW5kbGVk
IHByb21pc2UgcmVqZWN0aW9uIiBjYWxsYmFjayBmb3IgYSBjb250ZXh0LgorQGRpc2N1c3Npb24g
SlNDLW9ubHkgYWx0ZXJuYXRpdmUgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxl
ZHJlamVjdGlvbicpLgorQHBhcmFtIGN0eCBUaGUgSlNHbG9iYWxDb250ZXh0IHRvIHNldCB0aGUg
Y2FsbGJhY2sgb24uCitAcGFyYW0gZnVuY3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNl
dCwgd2hpY2ggcmVjZWl2ZXMgdGhlIHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMgYXJn
dW1lbnRzLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJl
amVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uKTsKKworLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCBTZXRzIHRoZSAibGF0ZS1oYW5kbGVk
IHByb21pc2UgcmVqZWN0aW9uIiBjYWxsYmFjayBmb3IgYSBjb250ZXh0LgorQGRpc2N1c3Npb24g
SlNDLW9ubHkgYWx0ZXJuYXRpdmUgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3JlamVjdGlv
bmhhbmRsZWQnKS4KK0BwYXJhbSBjdHggVGhlIEpTR2xvYmFsQ29udGV4dCB0byBzZXQgdGhlIGNh
bGxiYWNrIG9uLgorQHBhcmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQs
IHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3Vt
ZW50cy4KKyovCitKU19FWFBPUlQgdm9pZCBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25IYW5k
bGVkQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24p
OworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKaW5kZXggMWNmZDRjMDNhMDhiYWQ0MjJlOTQxNDE4ODVi
Yzk3YzBlOGQwZWI2Ni4uOWZjZGQ2MjY0YWFkOTM4Zjg0MGY0OWUxMjgwNTRiMjI1NzQ5ZjY5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCkBAIC0xMzcs
NiArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3ltYm9sc0RlbGV0ZVByb3BlcnR5Rm9yS2V5
KCk7CiAgICAgdm9pZCBwcm9taXNlUmVzb2x2ZVRydWUoKTsKICAgICB2b2lkIHByb21pc2VSZWpl
Y3RUcnVlKCk7CisgICAgdm9pZCBwcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2tzKCk7CiAKICAgICBp
bnQgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KIApAQCAtNDU0LDcgKzQ1NSw3
IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlc29sdmVUcnVlKCkKIAogICAgIGF1dG8gdHJ1ZVZh
bHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRydWUpOwogICAgIEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb24oY29udGV4dCwgcmVzb2x2ZSwgcmVzb2x2ZSwgMSwgJnRydWVWYWx1ZSwgJmV4
Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUg
dGhyb3duIHJlc29sdmUgcHJvbWlzZSIpOworICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNl
cHRpb24gc2hvdWxkIGJlIHRocm93biByZXNvbHZpbmcgcHJvbWlzZSIpOwogICAgIGNoZWNrKHBh
c3NlZFRydWVDYWxsZWQsICJ0aGVuIHJlc3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4g
Y2FsbGVkLiIpOwogfQogCkBAIC00NzksNyArNDgwLDcgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNl
UmVqZWN0VHJ1ZSgpCiAKICAgICBBUElTdHJpbmcgY2F0Y2hTdHJpbmcoImNhdGNoIik7CiAgICAg
SlNWYWx1ZVJlZiBjYXRjaEZ1bmN0aW9uID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBw
cm9taXNlLCBjYXRjaFN0cmluZywgJmV4Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiAm
JiBjYXRjaEZ1bmN0aW9uICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYXRjaEZ1bmN0aW9u
KSwgIlByb21pc2Ugc2hvdWxkIGhhdmUgYSB0aGVuIG9iamVjdCBwcm9wZXJ0eSIpOworICAgIGNo
ZWNrKCFleGNlcHRpb24gJiYgY2F0Y2hGdW5jdGlvbiAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4
dCwgY2F0Y2hGdW5jdGlvbiksICJQcm9taXNlIHNob3VsZCBoYXZlIGEgY2F0Y2ggb2JqZWN0IHBy
b3BlcnR5Iik7CiAKICAgICBKU1ZhbHVlUmVmIHBhc3NlZFRydWVGdW5jdGlvbiA9IEpTT2JqZWN0
TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQsIHRydWVTdHJpbmcsIHBhc3NlZFRydWUp
OwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVj
dFJlZj4oY2F0Y2hGdW5jdGlvbiksIHByb21pc2UsIDEsICZwYXNzZWRUcnVlRnVuY3Rpb24sICZl
eGNlcHRpb24pOwpAQCAtNDg3LDggKzQ4OCw0MSBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZWpl
Y3RUcnVlKCkKIAogICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIHRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVqZWN0LCBy
ZWplY3QsIDEsICZ0cnVlVmFsdWUsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24s
ICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biByZXNvbHZlIHByb21pc2UiKTsKLSAgICBj
aGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAidGhlbiByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2
ZSBiZWVuIGNhbGxlZC4iKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNo
b3VsZCBiZSB0aHJvd24gcmVqZWN0aW5nIHByb21pc2UiKTsKKyAgICBjaGVjayhwYXNzZWRUcnVl
Q2FsbGVkLCAiY2F0Y2ggcmVzcG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQu
Iik7Cit9CisKK3ZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrcygpCit7Cisg
ICAgSlNPYmplY3RSZWYgcmVqZWN0OworICAgIGF1dG8gcHJvbWlzZSA9IEpTT2JqZWN0TWFrZURl
ZmVycmVkUHJvbWlzZShjb250ZXh0LCBudWxscHRyLCAmcmVqZWN0LCBudWxscHRyKTsKKworICAg
IHN0YXRpYyBUZXN0QVBJKiB0ZXN0ZXIgPSB0aGlzOworICAgIHN0YXRpYyBhdXRvIGhhbmRsZXJD
YWxsQ291bnQgPSAwOworCisgICAgYXV0byBoYW5kbGVyID0gW10oSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiopIC0+IEpTVmFsdWVSZWYgeworICAgICAg
ICAvLyBUaGlzIGxhbWJkYSBpc24ndCBhbGxvd2VkIHRvIGNhcHR1cmUsIHNvIGp1c3QgY2hlY2sg
dGhhdCB3ZSBoYXZlIGEgdGhlbmFibGUgb2JqZWN0Li4uCisgICAgICAgIHRlc3Rlci0+Y2hlY2so
YXJndW1lbnRDb3VudCAmJiBKU09iamVjdEdldFByb3BlcnR5KGN0eCwgY29uc3RfY2FzdDxKU09i
amVjdFJlZj4oYXJndW1lbnRzWzBdKSwgQVBJU3RyaW5nKCJ0aGVuIiksIG51bGxwdHIpLCAiY2Fs
bGJhY2sgc2hvdWxkIGdldCBwcm9taXNlIGFzIGZpcnN0IHBhcmFtZXRlciIpOworICAgICAgICB0
ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291bnQgPT0gMiAmJiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChj
dHgsIGFyZ3VtZW50c1sxXSwgSlNWYWx1ZU1ha2VCb29sZWFuKGN0eCwgdHJ1ZSkpLCAiY2FsbGJh
Y2sgc2hvdWxkIGdldCByZXN1bHQgYXMgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgICBoYW5k
bGVyQ2FsbENvdW50Kys7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OworICAgIH07CisgICAgYXV0byBoYW5kbGVyRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlv
bldpdGhDYWxsYmFjayhjb250ZXh0LCBBUElTdHJpbmcoImhhbmRsZXIiKSwgaGFuZGxlcik7Cisg
ICAgCisgICAgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soY29u
dGV4dCwgaGFuZGxlckZ1bmN0aW9uKTsKKworICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIHRydWUpOworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgcmVqZWN0LCByZWplY3QsIDEsICZ0cnVlVmFsdWUsIG51bGxwdHIpOworICAgIGNoZWNr
KGhhbmRsZXJDYWxsQ291bnQgPT0gMSwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hv
dWxkIGhhdmUgYmVlbiBjYWxsZWQiKTsKKworICAgIGF1dG8gbm9vcEZ1bmN0aW9uID0gSlNPYmpl
Y3RNYWtlRnVuY3Rpb24oY29udGV4dCwgQVBJU3RyaW5nKCJub29wIiksIDAsIG51bGxwdHIsIEFQ
SVN0cmluZygiIiksIG51bGxwdHIsIDEsIG51bGxwdHIpOworICAgIAorICAgIEpTR2xvYmFsQ29u
dGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKGNvbnRleHQsIG5vb3BGdW5jdGlvbik7
CisgICAgSlNHbG9iYWxDb250ZXh0U2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKGNvbnRleHQs
IGhhbmRsZXJGdW5jdGlvbik7CisKKyAgICBhdXRvIGNhdGNoRnVuY3Rpb24gPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHByb21pc2UsIEFQSVN0cmluZygiY2F0Y2giKSwgbnVsbHB0cik7
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0
UmVmPihjYXRjaEZ1bmN0aW9uKSwgcHJvbWlzZSwgMSwgJm5vb3BGdW5jdGlvbiwgbnVsbHB0cik7
CisgICAgY2hlY2soaGFuZGxlckNhbGxDb3VudCA9PSAyLCAicmVqZWN0aW9uIGhhbmRsZWQgY2Fs
bGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiKTsKIH0KIAogI2RlZmluZSBSVU4odGVzdCkg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUyMSw2ICs1NTUsNyBA
QCBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTihzeW1ib2xz
RGVsZXRlUHJvcGVydHlGb3JLZXkoKSk7CiAgICAgUlVOKHByb21pc2VSZXNvbHZlVHJ1ZSgpKTsK
ICAgICBSVU4ocHJvbWlzZVJlamVjdFRydWUoKSk7CisgICAgUlVOKHByb21pc2VSZWplY3Rpb25D
YWxsYmFja3MoKSk7CiAKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFM
b2dMbigiRmlsdGVyZWQgYWxsIHRlc3RzOiBFUlJPUiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRl
eCBkNGZhMjIyYzcyMWNmNGE3ZTcxYWQ0Nzg2Zjk4NDExMTI0MWUxODUyLi4wYWM4NTQxMzUzNjMz
NTY4NmU5OWM4ZjM4M2U5ZmQxNWVkN2ZlYWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzc3
LDYgKzM3Nyw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RGlzYWJsZVJpY2hTb3VyY2VJbmZvKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWxsb2NJbkFMb29wKEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lKEV4
ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJh
Y2soRXhlY1N0YXRlKik7CisKIHN0cnVjdCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0
TW9kZSB7CiAgICAgICAgIFN0cmljdCwKQEAgLTYzMSw2ICs2MzQsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZGlzYWJsZVJpY2hTb3VyY2VJbmZvIiwgZnVuY3Rpb25E
aXNhYmxlUmljaFNvdXJjZUluZm8sIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm1hbGxv
Y0luQUxvb3AiLCBmdW5jdGlvbk1hbGxvY0luQUxvb3AsIDApOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgInRvdGFsQ29tcGlsZVRpbWUiLCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUsIDApOwor
CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2si
LCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLCAxKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJzZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2siLCBmdW5jdGlvblNldFJl
amVjdGlvbkhhbmRsZWRDYWxsYmFjaywgMSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVu
Y3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpAQCAtMjM4Myw2ICsyMzg5LDMy
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2ViQXNzZW1i
bHlNZW1vcnlNb2RlKEV4ZWNTdGF0ZSogZXhlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRVbmhhbmRsZWRS
ZWplY3Rpb25DYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKHZtKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSkpOworCisgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zZXRVbmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0s
IHZhbHVlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFJlamVjdGlvbkhhbmRs
ZWRDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKHZt
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSkpOworCisgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zZXRSZWplY3Rpb25I
YW5kbGVkQ2FsbGJhY2sodm0sIGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB2YWx1ZSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIC8vIFVz
ZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVw
b3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFu
ZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWlu
IGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCAw
MjYwN2M5Mjc0ODA5NmI4MTM5OWRiNGViZGVjMmUwYjZiYmM3OTc0Li43YmZmZmI0MDNjZjAxMDU0
OTI0NWFlMWQxY2YwNjM4NWRmNTg5OGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyNyw2ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgbV9uYW1lOwogCisgICAgU3Ryb25nPEpTRnVuY3Rpb24+IG1fdW5oYW5kbGVkUmVq
ZWN0aW9uQ2FsbGJhY2s7CisgICAgU3Ryb25nPEpTRnVuY3Rpb24+IG1fcmVqZWN0aW9uSGFuZGxl
ZENhbGxiYWNrOworCiAgICAgRGVidWdnZXIqIG1fZGVidWdnZXI7CiAKICAgICBWTSYgbV92bTsK
QEAgLTgwNyw2ICs4MTAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJp
bmcmKTsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
IAorICAgIHZvaWQgc2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soVk0mIHZtLCBKU0Z1bmN0
aW9uKiBmdW5jdGlvbikgeyBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLnNldCh2bSwgZnVu
Y3Rpb24pOyB9CisgICAgSlNGdW5jdGlvbiogdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKSBj
b25zdCB7IHJldHVybiBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLmdldCgpOyB9CisKKyAg
ICB2b2lkIHNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uKSB7IG1fcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9
CisgICAgSlNGdW5jdGlvbiogcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCkgY29uc3QgeyByZXR1
cm4gbV9yZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2suZ2V0KCk7IH0KKwogICAgIEpTT2JqZWN0KiBh
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVj
dHVyZS5jb25zdHJ1Y3Rvcih0aGlzKTsgfQogCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVyUHJv
dG90eXBlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUgc2hhcmluZ01vZGUpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAKaW5kZXggMDgxMTRjYTY5NjA2YjBjMzI2MzljMTQxZWU4Zjg2ZmY0MzVlYWEwNC4u
YWM5NTBjNzQzYjczMWQyMGI4MjNmNzdiNDJhNThjOWJlMGE3MDg1MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcApAQCAtNzY2LDEwICs3NjYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKQorICAgIEpTUHJvbWlzZSogcHJvbWlz
ZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICAvLyBJbnRl
cm5hbFByb21pc2VzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCisgICAg
aWYgKHByb21pc2UtPmluaGVyaXRzPEpTSW50ZXJuYWxQcm9taXNlPih2bSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU1Byb21pc2UqIHBy
b21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIEpTVmFs
dWUgb3BlcmF0aW9uVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIEFTU0VSVChvcGVy
YXRpb25WYWx1ZS5pc051bWJlcigpKTsKQEAgLTc3Nyw4ICs3NzksMjkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4
ZWNTdGF0ZSogZXgKICAgICBBU1NFUlQob3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9w
ZXJhdGlvbjo6UmVqZWN0IHx8IG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRp
b246OkhhbmRsZSk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNr
ZXIoZ2xvYmFsT2JqZWN0LCBleGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpIHsKKyAgICAgICAgZ2xv
YmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJh
Y2tlcihnbG9iYWxPYmplY3QsIGV4ZWMsIHByb21pc2UsIG9wZXJhdGlvbik7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dp
dGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRp
b246OlJlamVjdDoKKyAgICAgICAgICAgIHZtLm1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFBy
b21pc2VzLmNvbnN0cnVjdEFuZEFwcGVuZCh2bSwgcHJvbWlzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZTogewor
ICAgICAgICAgICAgYm9vbCByZW1vdmVkID0gdm0ubV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVk
UHJvbWlzZXMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJl0gKFN0cm9uZzxKU1Byb21pc2U+JiB1bmhh
bmRsZWRQcm9taXNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaGFuZGxlZFByb21pc2Uu
Z2V0KCkgPT0gcHJvbWlzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlbW92
ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICghdm0ubV9vdXRz
dGFuZGluZ1JlamVjdGVkUHJvbWlzZXMucmVtb3ZlKHByb21pc2UpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICB2bS5tX2xhdGVIYW5kbGVkUmVqZWN0ZWRQcm9taXNlcy5j
b25zdHJ1Y3RBbmRBcHBlbmQodm0sIHByb21pc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggMjVl
Zjk0NWNiZTVhNzQ0NWMyY2E3Y2UwNjI2YzJmOTg4NGE3YzIxMC4uOTEzNTcyMzI3MjBiYzFlN2Q3
OTE1OTU0ZTFkMzNjODc5MmY4Njc1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cApAQCAtMzA1LDYgKzMwNSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIGVudHJ5U2NvcGUoMCkKICAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4
cENhY2hlKHRoaXMpKQogICAgICwgbV9jb21wYWN0VmFyaWFibGVNYXAoYWRvcHRSZWYoKihuZXcg
Q29tcGFjdFZhcmlhYmxlTWFwKSkpCisgICAgLCBtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNl
cygqdGhpcykKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgLCBtX3J0VHJhY2VMaXN0
KG5ldyBSVFRyYWNlTGlzdCgpKQogI2VuZGlmCkBAIC0xMDg5LDEzICsxMDkwLDUyIEBAIHZvaWQg
Vk06OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxNaWNy
b3Rhc2s+JiYgdGFzaykKICAgICBtX21pY3JvdGFza1F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPFF1ZXVlZFRhc2s+KCp0aGlzLCAmZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHRhc2spKSk7CiB9
CiAKLXZvaWQgVk06OmRyYWluTWljcm90YXNrcygpCitpbmxpbmUgdm9pZCBWTTo6Y2FsbFByb21p
c2VSZWplY3Rpb25DYWxsYmFjayhKU0Z1bmN0aW9uKiBjYWxsYmFjaywgU3Ryb25nPEpTUHJvbWlz
ZT4mIHByb21pc2UpCit7CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnRoaXMpOworCisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSgqdGhpcywg
Y2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5v
bmUpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZChw
cm9taXNlLmdldCgpKTsKKyAgICBhcmdzLmFwcGVuZChwcm9taXNlLT5yZXN1bHQoKnRoaXMpKTsK
KyAgICBjYWxsKHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGNhbGxiYWNr
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzTnVsbCgpLCBhcmdzKTsKKyAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOworfQorCitpbmxpbmUgdm9pZCBWTTo6ZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVl
KCkKIHsKLSAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fbWljcm90YXNrUXVldWUudGFrZUZpcnN0KCktPnJ1bigpOwotICAgICAgICBpZiAobV9vbkVh
Y2hNaWNyb3Rhc2tUaWNrKQotICAgICAgICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNrKCp0aGlz
KTsKKyAgICBhdXRvIGxhdGVIYW5kbGVkUmVqZWN0aW9ucyA9IFdURk1vdmUobV9sYXRlSGFuZGxl
ZFJlamVjdGVkUHJvbWlzZXMpOworICAgIGZvciAoYXV0byYgcHJvbWlzZSA6IGxhdGVIYW5kbGVk
UmVqZWN0aW9ucykKKyAgICAgICAgY2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhwcm9taXNl
LT5nbG9iYWxPYmplY3QoKS0+cmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCksIHByb21pc2UpOwor
CisgICAgYXV0byB1bmhhbmRsZWRSZWplY3Rpb25zID0gV1RGTW92ZShtX2Fib3V0VG9CZU5vdGlm
aWVkUmVqZWN0ZWRQcm9taXNlcyk7CisgICAgZm9yIChhdXRvJiBwcm9taXNlIDogdW5oYW5kbGVk
UmVqZWN0aW9ucykgeworICAgICAgICBpZiAocHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJh
Y2socHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCks
IHByb21pc2UpOworCisgICAgICAgIGlmICghcHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAg
ICAgICAgICAgIG1fb3V0c3RhbmRpbmdSZWplY3RlZFByb21pc2VzLnNldChwcm9taXNlLmdldCgp
LCBwcm9taXNlLmdldCgpKTsKICAgICB9Cit9CisKK3ZvaWQgVk06OmRyYWluTWljcm90YXNrcygp
Cit7CisgICAgZG8geworICAgICAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBtX21pY3JvdGFza1F1ZXVlLnRha2VGaXJzdCgpLT5ydW4oKTsKKyAg
ICAgICAgICAgIGlmIChtX29uRWFjaE1pY3JvdGFza1RpY2spCisgICAgICAgICAgICAgICAgbV9v
bkVhY2hNaWNyb3Rhc2tUaWNrKCp0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBkaWRFeGhhdXN0
TWljcm90YXNrUXVldWUoKTsKKyAgICB9IHdoaWxlICghbV9taWNyb3Rhc2tRdWV1ZS5pc0VtcHR5
KCkpOwogICAgIGZpbmFsaXplU3luY2hyb25vdXNKU0V4ZWN1dGlvbigpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5MDE0OTdiMjk0NDM2OWVlYWQ3NDBlNzUxMGU5ODY3
OThmMmM2NzdmLi43NGM4ODgzNTNhZTA0ZmE5ZWU3YzU1MDgyODY3Zjc5MjhiODBlMWRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEyMSw4ICsxMjEsMTAgQEAgY2xhc3MgSWRl
bnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwogY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbjsKIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOworY2xhc3Mg
SlNGdW5jdGlvbjsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CitjbGFz
cyBKU1Byb21pc2U7CiBjbGFzcyBKU1J1bkxvb3BUaW1lcjsKIGNsYXNzIEpTU3RyaW5nSGVhcENl
bGxUeXBlOwogY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKQEAgLTgy
OCw2ICs4MzAsMTAgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSGFzT3duUHJvcGVydHlD
YWNoZSogaGFzT3duUHJvcGVydHlDYWNoZSgpIHsgcmV0dXJuIG1faGFzT3duUHJvcGVydHlDYWNo
ZS5nZXQoKTsgfQogICAgIEhhc093blByb3BlcnR5Q2FjaGUqIGVuc3VyZUhhc093blByb3BlcnR5
Q2FjaGUoKTsKIAorICAgIFZlY3RvcjxTdHJvbmc8SlNQcm9taXNlPj4gbV9hYm91dFRvQmVOb3Rp
ZmllZFJlamVjdGVkUHJvbWlzZXM7CisgICAgVmVjdG9yPFN0cm9uZzxKU1Byb21pc2U+PiBtX2xh
dGVIYW5kbGVkUmVqZWN0ZWRQcm9taXNlczsKKyAgICBXZWFrR0NNYXA8SlNQcm9taXNlKiwgSlNQ
cm9taXNlPiBtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlczsKKwogI2lmIEVOQUJMRShSRUdF
WFBfVFJBQ0lORykKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZ0V4cCo+IFJUVHJhY2VMaXN0
OwogICAgIFJUVHJhY2VMaXN0KiBtX3J0VHJhY2VMaXN0OwpAQCAtMTAwNSw2ICsxMDExLDkgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJh
Y2sodm9pZCopOwogICAgIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogCisgICAg
dm9pZCBjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKEpTRnVuY3Rpb24qLCBTdHJvbmc8SlNQ
cm9taXNlPiYpOworICAgIHZvaWQgZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKCk7CisKICNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKICAgICBjb25zdCBDbGFzc0luZm8qIG1faW5pdGlhbGl6aW5n
T2JqZWN0Q2xhc3M7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3ODhlMmU2NzdmN2YyMGNkMzlkMjE3MTJjZjg2NzQ2
MGI1NmY1YjRiLi42OGQxMmNjZGFjOGQ2N2IyZDgxYmZhNWRhMzk4NzFkMDcyNjBlMWM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBA
IC0yMjIsMTAgKzIyMiw2IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rp
b25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEludGVybmFsUHJvbWlzZXMgc2hvdWxkIG5v
dCBiZSBleHBvc2VkIHRvIHVzZXIgc2NyaXB0cy4KLSAgICBpZiAoSlNDOjpqc0R5bmFtaWNDYXN0
PEpTQzo6SlNJbnRlcm5hbFByb21pc2UqPih2bSwgcHJvbWlzZSkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHQgaGFzIG11dGVkIGVycm9ycyAoY3Jvc3Mgb3JpZ2lu
KSwgdGVybWluYXRlIHRoZXNlIHN0ZXBzLgogICAgIC8vIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
NzE0MTU+IEltcGxlbWVudCB0aGUgYG11dGVkLWVycm9yc2AgcHJvcGVydHkgb2YgU2NyaXB0cyB0
byBhdm9pZCBvbmVycm9yL29udW5oYW5kbGVkcmVqZWN0aW9uIGZvciBjcm9zcy1vcmlnaW4gc2Ny
aXB0cwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373564</attachid>
            <date>2019-07-05 22:23:39 -0700</date>
            <delta_ts>2019-07-30 17:20:18 -0700</delta_ts>
            <desc>Patch based on microtask queue</desc>
            <filename>bug-197172-20190705222339.patch</filename>
            <type>text/plain</type>
            <size>22662</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ODc2NWZlZjBlY2Q0MTJkYmZlZmJiZDZhNTFhOTc2YzEwYjA0ZDQ5Li4yZmVmYTI1NWE0YWQ1NTJm
ZmIxZWNkNWQ1ZTgxYWVkZmM3OWJlNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxOS0wNy0wNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIGNhbGxiYWNrcyBmb3IgdW5oYW5kbGVkIGFu
ZCBsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIHRvIGJlIHNldCB2aWEgSlNDJ3MgcHVi
bGljIEMgQVBJLgorICAgICAgICBTaW5jZSB0aGVyZSBpcyBubyBldmVudCBsb29wIGluIHN1Y2gg
YW4gZW52aXJvbm1lbnQsIHRoZXNlIGNhbGxiYWNrcyBmaXJlIG9mZiBvZiB0aGUgbWljcm90YXNr
IHF1ZXVlLgorICAgICAgICBDYWxsYmFja3MgcmVjZWl2ZSB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0
aW9uIHJlYXNvbiBhcyBhcmd1bWVudHMgYW5kIHRoZWlyIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVk
LgorCisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChKU0dsb2JhbENv
bnRleHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoSlNH
bG9iYWxDb250ZXh0U2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKTogQWRkZWQuCisgICAgICAg
ICogQVBJL0pTQ29udGV4dFJlZi5oOgorICAgICAgICBBZGQgbmV3IHB1YmxpYyBBUElzLgorCisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlz
ZVJlc29sdmVUcnVlKTogQ2xlYW4gdXAgdGVzdCBvdXRwdXQuIAorICAgICAgICAoVGVzdEFQSTo6
cHJvbWlzZVJlamVjdFRydWUpOiBDbGVhbiB1cCB0ZXN0IG91dHB1dC4KKyAgICAgICAgKFRlc3RB
UEk6OnByb21pc2VSZWplY3Rpb25DYWxsYmFja3MpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDQVBJ
VmlhQ3BwKToKKyAgICAgICAgQWRkIG5ldyBDKysgQVBJIHRlc3QuCisKKyAgICAgICAgKiBqc2Mu
Y3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChm
dW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChm
dW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayk6IEFkZGVkLgorICAgICAgICBBZGQg
Y29ycmVzcG9uZGluZyBnbG9iYWxzIHRvIEpTQyBzaGVsbC4KKworICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnNldFVuaGFu
ZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayBjb25zdCk6IEFkZGVkLgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKTogQWRkZWQu
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2sg
Y29uc3QpOiBBZGRlZC4KKyAgICAgICAgS2VlcCBzdHJvbmcgcmVmZXJlbmNlcyB0byB0aGUgY2Fs
bGJhY2tzLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIpOgor
ICAgICAgICBBZGQgZGVmYXVsdCBiZWhhdmlvciAoYmFzZWQgb24gcHJvbWlzZVJlamVjdGVkIGFu
ZCBwcm9taXNlSGFuZGxlZCBpbiBSZWplY3RlZFByb21pc2VUcmFja2VyKS4KKworICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpW
TTo6Y2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoSlNDOjpW
TTo6ZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKTogQWRkZWQuCisgICAgICAgIChKU0M6OlZNOjpk
cmFpbk1pY3JvdGFza3MpOgorICAgICAgICBXaGVuIG1pY3JvdGFzayBxdWV1ZSBpcyBleGhhdXN0
ZWQsIGRlYWwgd2l0aCBhbnkgcGVuZGluZyB1bmhhbmRsZWQgLyBsYXRlLWhhbmRsZWQgcmVqZWN0
aW9ucworICAgICAgICAoaW4gYSBtYW5uZXIgYmFzZWQgb24gUmVqZWN0ZWRQcm9taXNlVHJhY2tl
cidzIHJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnMgYW5kIHJlcG9ydFJlamVjdGlvbkhhbmRsZWQp
LAorICAgICAgICB0aGVuIG1ha2Ugc3VyZSB0aGlzIGRpZG4ndCBjYXVzZSBhbnkgbmV3IG1pY3Jv
dGFza3MgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLgorCisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICBTdG9yZSByZWplY3Rpb25zIG9mIHZhcmlvdXMgc3RhdGVzICh0aGVzZSBjb2xs
ZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSBlbXB0eSBpbiB0aGUgcHJlc2VuY2Ugb2YgV2ViQ29yZSku
CisKIDIwMTktMDctMDUgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgog
CiAgICAgICAgIFtKU0NdIENsZWFuIHVwIEFycmF5U3BlY2llc0NyZWF0ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGEzMTIyMWZlN2Y2YWQ5ZGQ3YmIxYjJmYzAwNzhjNjgzOGI1NmY2YWUuLjQxNTUwNWQ2MjNkOTgw
M2U3ZTBiNTFmMWM4NzllYWEzNTA2NDFkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0wNy0wNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAg
ICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxlZCBwcm9taXNlIHJl
amVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKToKKyAgICAgICAgTW92
ZSBKU0ludGVybmFsUHJvbWlzZSBlYXJseS1vdXQgdG8gSlNDIHNpZGUuCisKIDIwMTktMDctMDUg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBmZXRjaCBx
dWlyayBmb3Igd3d3LmJuei5jby5uegpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHRSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRSZWYuY3BwCmluZGV4IDlmNWZkYWZjNzgxOTZmZTQ0OGMxOGQwNzkxNWUwNGZhMzg2ODRhYWEu
LjcyZDAwZTM5ODQwNzRiMDYwOGU3NGExNGQ0YWQ2NjQwZjljNzk0YWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
V2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjQ5LDYgKzI1MCw0NyBAQCB2b2lkIEpTR2xv
YmFsQ29udGV4dFNldE5hbWUoSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFt
ZSkKICAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5zZXROYW1lKG5hbWUgPyBuYW1l
LT5zdHJpbmcoKSA6IFN0cmluZygpKTsKIH0KIAordm9pZCBKU0dsb2JhbENvbnRleHRTZXRVbmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjayhKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIWN0eCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMoZnVuY3Rpb24pOworICAgIGlmICghanNPYmplY3Qt
PmlzRnVuY3Rpb24odm0pKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhl
YyktPnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGpzT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNHbG9iYWxDb250ZXh0U2V0UmVqZWN0aW9uSGFuZGxl
ZENhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uKQor
eworICAgIGlmICghY3R4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIGpz
T2JqZWN0ID0gdG9KUyhmdW5jdGlvbik7CisgICAgaWYgKCFqc09iamVjdC0+aXNGdW5jdGlvbih2
bSkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0UmVqZWN0
aW9uSGFuZGxlZENhbGxiYWNrKHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGpzT2JqZWN0KSk7Cit9
CiAKIGNsYXNzIEJhY2t0cmFjZUZ1bmN0b3IgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0UmVmLmgKaW5kZXggMWNlNzQzNTgwNGViYjliYzQ3ZjdjMWYwZDllOTRm
YzA3ODk4OGMwYi4uODM1NWZjYzFhOGM0M2VlOGYxMjAyZDU1YTBhMGRlOWRhMGM2NTE1MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5oCkBAIC0xNTYsNiArMTU2LDI0
IEBAIEpTX0VYUE9SVCBKU1N0cmluZ1JlZiBKU0dsb2JhbENvbnRleHRDb3B5TmFtZShKU0dsb2Jh
bENvbnRleHRSZWYgY3R4KSBKU0NfQVBJX0FWCiAqLwogSlNfRVhQT1JUIHZvaWQgSlNHbG9iYWxD
b250ZXh0U2V0TmFtZShKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBuYW1lKSBK
U0NfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKTsKIAorLyohCitAZnVuY3Rp
b24KK0BhYnN0cmFjdCBTZXRzIHRoZSAidW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIiBjYWxs
YmFjayBmb3IgYSBjb250ZXh0LgorQGRpc2N1c3Npb24gSlNDLW9ubHkgYWx0ZXJuYXRpdmUgdG8g
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicpLgorQHBhcmFtIGN0
eCBUaGUgSlNHbG9iYWxDb250ZXh0IHRvIHNldCB0aGUgY2FsbGJhY2sgb24uCitAcGFyYW0gZnVu
Y3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCwgd2hpY2ggcmVjZWl2ZXMgdGhlIHBy
b21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMgYXJndW1lbnRzLgorKi8KK0pTX0VYUE9SVCB2
b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uKTsKKworLyohCitAZnVuY3Rpb24K
K0BhYnN0cmFjdCBTZXRzIHRoZSAibGF0ZS1oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIiBjYWxs
YmFjayBmb3IgYSBjb250ZXh0LgorQGRpc2N1c3Npb24gSlNDLW9ubHkgYWx0ZXJuYXRpdmUgdG8g
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3JlamVjdGlvbmhhbmRsZWQnKS4KK0BwYXJhbSBjdHgg
VGhlIEpTR2xvYmFsQ29udGV4dCB0byBzZXQgdGhlIGNhbGxiYWNrIG9uLgorQHBhcmFtIGZ1bmN0
aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9t
aXNlIGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KKyovCitKU19FWFBPUlQgdm9p
ZCBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24pOworCiAjaWZkZWYgX19jcGx1c3BsdXMK
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAK
aW5kZXggMWNmZDRjMDNhMDhiYWQ0MjJlOTQxNDE4ODViYzk3YzBlOGQwZWI2Ni4uOWZjZGQ2MjY0
YWFkOTM4Zjg0MGY0OWUxMjgwNTRiMjI1NzQ5ZjY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCkBAIC0xMzcsNiArMTM3LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc3ltYm9sc0RlbGV0ZVByb3BlcnR5Rm9yS2V5KCk7CiAgICAgdm9pZCBwcm9taXNlUmVz
b2x2ZVRydWUoKTsKICAgICB2b2lkIHByb21pc2VSZWplY3RUcnVlKCk7CisgICAgdm9pZCBwcm9t
aXNlUmVqZWN0aW9uQ2FsbGJhY2tzKCk7CiAKICAgICBpbnQgZmFpbGVkKCkgY29uc3QgeyByZXR1
cm4gbV9mYWlsZWQ7IH0KIApAQCAtNDU0LDcgKzQ1NSw3IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlz
ZVJlc29sdmVUcnVlKCkKIAogICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFu
KGNvbnRleHQsIHRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVz
b2x2ZSwgcmVzb2x2ZSwgMSwgJnRydWVWYWx1ZSwgJmV4Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4
Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmUgcHJvbWlzZSIp
OworICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biBy
ZXNvbHZpbmcgcHJvbWlzZSIpOwogICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQsICJ0aGVuIHJl
c3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOwogfQogCkBAIC00Nzks
NyArNDgwLDcgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSgpCiAKICAgICBBUElT
dHJpbmcgY2F0Y2hTdHJpbmcoImNhdGNoIik7CiAgICAgSlNWYWx1ZVJlZiBjYXRjaEZ1bmN0aW9u
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBwcm9taXNlLCBjYXRjaFN0cmluZywgJmV4
Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYXRjaEZ1bmN0aW9uICYmIEpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBjYXRjaEZ1bmN0aW9uKSwgIlByb21pc2Ugc2hvdWxkIGhhdmUg
YSB0aGVuIG9iamVjdCBwcm9wZXJ0eSIpOworICAgIGNoZWNrKCFleGNlcHRpb24gJiYgY2F0Y2hG
dW5jdGlvbiAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2F0Y2hGdW5jdGlvbiksICJQcm9t
aXNlIHNob3VsZCBoYXZlIGEgY2F0Y2ggb2JqZWN0IHByb3BlcnR5Iik7CiAKICAgICBKU1ZhbHVl
UmVmIHBhc3NlZFRydWVGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNr
KGNvbnRleHQsIHRydWVTdHJpbmcsIHBhc3NlZFRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oY2F0Y2hGdW5jdGlvbiksIHBy
b21pc2UsIDEsICZwYXNzZWRUcnVlRnVuY3Rpb24sICZleGNlcHRpb24pOwpAQCAtNDg3LDggKzQ4
OCw0MSBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZWplY3RUcnVlKCkKIAogICAgIGF1dG8gdHJ1
ZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRydWUpOwogICAgIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEsICZ0cnVlVmFsdWUsICZl
eGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJl
IHRocm93biByZXNvbHZlIHByb21pc2UiKTsKLSAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAi
dGhlbiByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKKyAgICBj
aGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gcmVqZWN0aW5n
IHByb21pc2UiKTsKKyAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAiY2F0Y2ggcmVzcG9uc2Ug
ZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7Cit9CisKK3ZvaWQgVGVzdEFQSTo6
cHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrcygpCit7CisgICAgSlNPYmplY3RSZWYgcmVqZWN0Owor
ICAgIGF1dG8gcHJvbWlzZSA9IEpTT2JqZWN0TWFrZURlZmVycmVkUHJvbWlzZShjb250ZXh0LCBu
dWxscHRyLCAmcmVqZWN0LCBudWxscHRyKTsKKworICAgIHN0YXRpYyBUZXN0QVBJKiB0ZXN0ZXIg
PSB0aGlzOworICAgIHN0YXRpYyBhdXRvIGhhbmRsZXJDYWxsQ291bnQgPSAwOworCisgICAgYXV0
byBoYW5kbGVyID0gW10oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiopIC0+IEpTVmFsdWVSZWYgeworICAgICAgICAvLyBUaGlzIGxhbWJkYSBpc24ndCBh
bGxvd2VkIHRvIGNhcHR1cmUsIHNvIGp1c3QgY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdGhlbmFibGUg
b2JqZWN0Li4uCisgICAgICAgIHRlc3Rlci0+Y2hlY2soYXJndW1lbnRDb3VudCAmJiBKU09iamVj
dEdldFByb3BlcnR5KGN0eCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oYXJndW1lbnRzWzBdKSwg
QVBJU3RyaW5nKCJ0aGVuIiksIG51bGxwdHIpLCAiY2FsbGJhY2sgc2hvdWxkIGdldCBwcm9taXNl
IGFzIGZpcnN0IHBhcmFtZXRlciIpOworICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291
bnQgPT0gMiAmJiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChjdHgsIGFyZ3VtZW50c1sxXSwgSlNWYWx1
ZU1ha2VCb29sZWFuKGN0eCwgdHJ1ZSkpLCAiY2FsbGJhY2sgc2hvdWxkIGdldCByZXN1bHQgYXMg
c2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgICBoYW5kbGVyQ2FsbENvdW50Kys7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworICAgIH07CisgICAgYXV0byBoYW5k
bGVyRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBB
UElTdHJpbmcoImhhbmRsZXIiKSwgaGFuZGxlcik7CisgICAgCisgICAgSlNHbG9iYWxDb250ZXh0
U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soY29udGV4dCwgaGFuZGxlckZ1bmN0aW9uKTsK
KworICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRydWUp
OworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEs
ICZ0cnVlVmFsdWUsIG51bGxwdHIpOworICAgIGNoZWNrKGhhbmRsZXJDYWxsQ291bnQgPT0gMSwg
InVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiKTsK
KworICAgIGF1dG8gbm9vcEZ1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVuY3Rpb24oY29udGV4dCwg
QVBJU3RyaW5nKCJub29wIiksIDAsIG51bGxwdHIsIEFQSVN0cmluZygiIiksIG51bGxwdHIsIDEs
IG51bGxwdHIpOworICAgIAorICAgIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKGNvbnRleHQsIG5vb3BGdW5jdGlvbik7CisgICAgSlNHbG9iYWxDb250ZXh0U2V0
UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKGNvbnRleHQsIGhhbmRsZXJGdW5jdGlvbik7CisKKyAg
ICBhdXRvIGNhdGNoRnVuY3Rpb24gPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHByb21p
c2UsIEFQSVN0cmluZygiY2F0Y2giKSwgbnVsbHB0cik7CisgICAgSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihjYXRjaEZ1bmN0aW9uKSwgcHJv
bWlzZSwgMSwgJm5vb3BGdW5jdGlvbiwgbnVsbHB0cik7CisgICAgY2hlY2soaGFuZGxlckNhbGxD
b3VudCA9PSAyLCAicmVqZWN0aW9uIGhhbmRsZWQgY2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBj
YWxsZWQiKTsKIH0KIAogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKQEAgLTUyMSw2ICs1NTUsNyBAQCBpbnQgdGVzdENBUElWaWFDcHAoY29u
c3QgY2hhciogZmlsdGVyKQogICAgIFJVTihzeW1ib2xzRGVsZXRlUHJvcGVydHlGb3JLZXkoKSk7
CiAgICAgUlVOKHByb21pc2VSZXNvbHZlVHJ1ZSgpKTsKICAgICBSVU4ocHJvbWlzZVJlamVjdFRy
dWUoKSk7CisgICAgUlVOKHByb21pc2VSZWplY3Rpb25DYWxsYmFja3MoKSk7CiAKICAgICBpZiAo
dGFza3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFMb2dMbigiRmlsdGVyZWQgYWxsIHRlc3Rz
OiBFUlJPUiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBkNGZhMjIyYzcyMWNmNGE3ZTcxYWQ0
Nzg2Zjk4NDExMTI0MWUxODUyLi4wYWM4NTQxMzUzNjMzNTY4NmU5OWM4ZjM4M2U5ZmQxNWVkN2Zl
YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzc3LDYgKzM3Nyw5IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGlzYWJsZVJpY2hTb3VyY2VJbmZvKEV4
ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25N
YWxsb2NJbkFMb29wKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lKEV4ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soRXhlY1N0YXRlKik7CisKIHN0cnVj
dCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0TW9kZSB7CiAgICAgICAgIFN0cmljdCwK
QEAgLTYzMSw2ICs2MzQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
ZGlzYWJsZVJpY2hTb3VyY2VJbmZvIiwgZnVuY3Rpb25EaXNhYmxlUmljaFNvdXJjZUluZm8sIDAp
OwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm1hbGxvY0luQUxvb3AiLCBmdW5jdGlvbk1hbGxv
Y0luQUxvb3AsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInRvdGFsQ29tcGlsZVRpbWUi
LCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUsIDApOworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAic2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2siLCBmdW5jdGlvblNldFVuaGFuZGxlZFJl
amVjdGlvbkNhbGxiYWNrLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJzZXRSZWplY3Rp
b25IYW5kbGVkQ2FsbGJhY2siLCBmdW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjaywg
MSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCog
b2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKQpAQCAtMjM4Myw2ICsyMzg5LDMyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2ViQXNzZW1ibHlNZW1vcnlNb2RlKEV4ZWNTdGF0ZSog
ZXhlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKHZtKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkpOworCisgICAgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayh2
bSwganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHZhbHVlKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKHZtKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkpOworCisgICAgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5zZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2sodm0sIGpzRHlu
YW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB2YWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRz
IG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkg
dGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4g
TmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpz
Y21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCAwMjYwN2M5Mjc0ODA5NmI4MTM5OWRiNGVi
ZGVjMmUwYjZiYmM3OTc0Li43YmZmZmI0MDNjZjAxMDU0OTI0NWFlMWQxY2YwNjM4NWRmNTg5OGI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
QEAgLTQyNyw2ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbV9uYW1lOwogCisgICAg
U3Ryb25nPEpTRnVuY3Rpb24+IG1fdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2s7CisgICAgU3Ry
b25nPEpTRnVuY3Rpb24+IG1fcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrOworCiAgICAgRGVidWdn
ZXIqIG1fZGVidWdnZXI7CiAKICAgICBWTSYgbV92bTsKQEAgLTgwNyw2ICs4MTAsMTIgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcm
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAorICAgIHZvaWQgc2V0VW5oYW5kbGVk
UmVqZWN0aW9uQ2FsbGJhY2soVk0mIHZtLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgeyBtX3VuaGFu
ZGxlZFJlamVjdGlvbkNhbGxiYWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9CisgICAgSlNGdW5jdGlv
biogdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3VuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFJlamVjdGlvbkhhbmRs
ZWRDYWxsYmFjayhWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSB7IG1fcmVqZWN0aW9uSGFu
ZGxlZENhbGxiYWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9CisgICAgSlNGdW5jdGlvbiogcmVqZWN0
aW9uSGFuZGxlZENhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9yZWplY3Rpb25IYW5kbGVkQ2Fs
bGJhY2suZ2V0KCk7IH0KKwogICAgIEpTT2JqZWN0KiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5jb25zdHJ1Y3Rvcih0aGlzKTsg
fQogCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVyUHJvdG90eXBlKEFycmF5QnVmZmVyU2hhcmlu
Z01vZGUgc2hhcmluZ01vZGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKaW5kZXggMDgxMTRjYTY5
NjA2YjBjMzI2MzljMTQxZWU4Zjg2ZmY0MzVlYWEwNC4uYWM5NTBjNzQzYjczMWQyMGI4MjNmNzdi
NDJhNThjOWJlMGE3MDg1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApAQCAtNzY2LDEwICs3NjYsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWpl
Y3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYg
KCFnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rp
b25UcmFja2VyKQorICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihl
eGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICAvLyBJbnRlcm5hbFByb21pc2VzIHNob3VsZCBub3Qg
YmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCisgICAgaWYgKHByb21pc2UtPmluaGVyaXRzPEpT
SW50ZXJuYWxQcm9taXNlPih2bSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKLSAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNl
Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIEpTVmFsdWUgb3BlcmF0aW9uVmFsdWUgPSBleGVj
LT5hcmd1bWVudCgxKTsKIAogICAgIEFTU0VSVChvcGVyYXRpb25WYWx1ZS5pc051bWJlcigpKTsK
QEAgLTc3Nyw4ICs3NzksMjkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBBU1NFUlQo
b3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0IHx8IG9wZXJh
dGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZSk7CiAgICAgc2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBleGVjLCBw
cm9taXNlLCBvcGVyYXRpb24pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlz
ZVJlamVjdGlvblRyYWNrZXIpIHsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcihnbG9iYWxPYmplY3QsIGV4ZWMs
IHByb21pc2UsIG9wZXJhdGlvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdDoKKyAgICAgICAgICAg
IHZtLm1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzLmNvbnN0cnVjdEFuZEFwcGVu
ZCh2bSwgcHJvbWlzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZTogeworICAgICAgICAgICAgYm9vbCByZW1vdmVk
ID0gdm0ubV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMucmVtb3ZlRmlyc3RNYXRj
aGluZyhbJl0gKFN0cm9uZzxKU1Byb21pc2U+JiB1bmhhbmRsZWRQcm9taXNlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHVuaGFuZGxlZFByb21pc2UuZ2V0KCkgPT0gcHJvbWlzZTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlbW92ZWQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGlmICghdm0ubV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMu
cmVtb3ZlKHByb21pc2UpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB2
bS5tX2xhdGVIYW5kbGVkUmVqZWN0ZWRQcm9taXNlcy5jb25zdHJ1Y3RBbmRBcHBlbmQodm0sIHBy
b21pc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggMjVlZjk0NWNiZTVhNzQ0NWMyY2E3Y2UwNjI2
YzJmOTg4NGE3YzIxMC4uOTEzNTcyMzI3MjBiYzFlN2Q3OTE1OTU0ZTFkMzNjODc5MmY4Njc1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzA1LDYgKzMwNSw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGVudHJ5U2NvcGUo
MCkKICAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogICAgICwgbV9j
b21wYWN0VmFyaWFibGVNYXAoYWRvcHRSZWYoKihuZXcgQ29tcGFjdFZhcmlhYmxlTWFwKSkpCisg
ICAgLCBtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlcygqdGhpcykKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCiAgICAgLCBtX3J0VHJhY2VMaXN0KG5ldyBSVFRyYWNlTGlzdCgpKQogI2Vu
ZGlmCkBAIC0xMDg5LDEzICsxMDkwLDUyIEBAIHZvaWQgVk06OnF1ZXVlTWljcm90YXNrKEpTR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxNaWNyb3Rhc2s+JiYgdGFzaykKICAgICBtX21p
Y3JvdGFza1F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFF1ZXVlZFRhc2s+KCp0aGlzLCAm
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKLXZvaWQgVk06OmRyYWluTWljcm90
YXNrcygpCitpbmxpbmUgdm9pZCBWTTo6Y2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhKU0Z1
bmN0aW9uKiBjYWxsYmFjaywgU3Ryb25nPEpTUHJvbWlzZT4mIHByb21pc2UpCit7CisgICAgaWYg
KCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUoKnRoaXMpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSgqdGhpcywgY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAg
ICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZChwcm9taXNlLmdldCgpKTsKKyAgICBhcmdz
LmFwcGVuZChwcm9taXNlLT5yZXN1bHQoKnRoaXMpKTsKKyAgICBjYWxsKHByb21pc2UtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpz
TnVsbCgpLCBhcmdzKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworfQorCitpbmxpbmUg
dm9pZCBWTTo6ZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKCkKIHsKLSAgICB3aGlsZSAoIW1fbWlj
cm90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbWljcm90YXNrUXVldWUudGFrZUZp
cnN0KCktPnJ1bigpOwotICAgICAgICBpZiAobV9vbkVhY2hNaWNyb3Rhc2tUaWNrKQotICAgICAg
ICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNrKCp0aGlzKTsKKyAgICBhdXRvIGxhdGVIYW5kbGVk
UmVqZWN0aW9ucyA9IFdURk1vdmUobV9sYXRlSGFuZGxlZFJlamVjdGVkUHJvbWlzZXMpOworICAg
IGZvciAoYXV0byYgcHJvbWlzZSA6IGxhdGVIYW5kbGVkUmVqZWN0aW9ucykKKyAgICAgICAgY2Fs
bFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+cmVqZWN0
aW9uSGFuZGxlZENhbGxiYWNrKCksIHByb21pc2UpOworCisgICAgYXV0byB1bmhhbmRsZWRSZWpl
Y3Rpb25zID0gV1RGTW92ZShtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcyk7Cisg
ICAgZm9yIChhdXRvJiBwcm9taXNlIDogdW5oYW5kbGVkUmVqZWN0aW9ucykgeworICAgICAgICBp
ZiAocHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2socHJvbWlzZS0+Z2xvYmFsT2JqZWN0
KCktPnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCksIHByb21pc2UpOworCisgICAgICAgIGlm
ICghcHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAgICAgICAgICAgIG1fb3V0c3RhbmRpbmdS
ZWplY3RlZFByb21pc2VzLnNldChwcm9taXNlLmdldCgpLCBwcm9taXNlLmdldCgpKTsKICAgICB9
Cit9CisKK3ZvaWQgVk06OmRyYWluTWljcm90YXNrcygpCit7CisgICAgZG8geworICAgICAgICB3
aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX21pY3Jv
dGFza1F1ZXVlLnRha2VGaXJzdCgpLT5ydW4oKTsKKyAgICAgICAgICAgIGlmIChtX29uRWFjaE1p
Y3JvdGFza1RpY2spCisgICAgICAgICAgICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNrKCp0aGlz
KTsKKyAgICAgICAgfQorICAgICAgICBkaWRFeGhhdXN0TWljcm90YXNrUXVldWUoKTsKKyAgICB9
IHdoaWxlICghbV9taWNyb3Rhc2tRdWV1ZS5pc0VtcHR5KCkpOwogICAgIGZpbmFsaXplU3luY2hy
b25vdXNKU0V4ZWN1dGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRl
eCA5MDE0OTdiMjk0NDM2OWVlYWQ3NDBlNzUxMGU5ODY3OThmMmM2NzdmLi43NGM4ODgzNTNhZTA0
ZmE5ZWU3YzU1MDgyODY3Zjc5MjhiODBlMWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKQEAgLTEyMSw4ICsxMjEsMTAgQEAgY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJl
dGVyOwogY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKIGNsYXNzIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOworY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CitjbGFzcyBKU1Byb21pc2U7CiBjbGFzcyBKU1J1
bkxvb3BUaW1lcjsKIGNsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlOwogY2xhc3MgSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKQEAgLTgyOCw2ICs4MzAsMTAgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgSGFzT3duUHJvcGVydHlDYWNoZSogaGFzT3duUHJvcGVydHlDYWNo
ZSgpIHsgcmV0dXJuIG1faGFzT3duUHJvcGVydHlDYWNoZS5nZXQoKTsgfQogICAgIEhhc093blBy
b3BlcnR5Q2FjaGUqIGVuc3VyZUhhc093blByb3BlcnR5Q2FjaGUoKTsKIAorICAgIFZlY3RvcjxT
dHJvbmc8SlNQcm9taXNlPj4gbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXM7Cisg
ICAgVmVjdG9yPFN0cm9uZzxKU1Byb21pc2U+PiBtX2xhdGVIYW5kbGVkUmVqZWN0ZWRQcm9taXNl
czsKKyAgICBXZWFrR0NNYXA8SlNQcm9taXNlKiwgSlNQcm9taXNlPiBtX291dHN0YW5kaW5nUmVq
ZWN0ZWRQcm9taXNlczsKKwogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICB0eXBlZGVm
IExpc3RIYXNoU2V0PFJlZ0V4cCo+IFJUVHJhY2VMaXN0OwogICAgIFJUVHJhY2VMaXN0KiBtX3J0
VHJhY2VMaXN0OwpAQCAtMTAwNSw2ICsxMDExLDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sodm9pZCopOwogICAgIHZvaWQgcHJp
bWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogCisgICAgdm9pZCBjYWxsUHJvbWlzZVJlamVjdGlv
bkNhbGxiYWNrKEpTRnVuY3Rpb24qLCBTdHJvbmc8SlNQcm9taXNlPiYpOworICAgIHZvaWQgZGlk
RXhoYXVzdE1pY3JvdGFza1F1ZXVlKCk7CisKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAg
ICBjb25zdCBDbGFzc0luZm8qIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3M7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCA3ODhlMmU2NzdmN2YyMGNkMzlkMjE3MTJjZjg2NzQ2MGI1NmY1YjRiLi44MDMwZDM1NDBmNWIx
NDY0OTRjNTA2YmJiY2ZiOGUyNDMyYWYxN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC0yMTYsMTYgKzIxNiwxMSBAQCB2b2lk
IEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVj
dCoganNHbG9iYWxPYmplY3QsCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNr
ZXItaW1wbGVtZW50YXRpb24KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byYg
Z2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oanNHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8qIGNvbnRleHQgPSBnbG9iYWxPYmplY3Quc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
SW50ZXJuYWxQcm9taXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3JpcHRzLgot
ICAgIGlmIChKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0ludGVybmFsUHJvbWlzZSo+KHZtLCBw
cm9taXNlKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IElmIHNjcmlwdCBoYXMg
bXV0ZWQgZXJyb3JzIChjcm9zcyBvcmlnaW4pLCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuCiAgICAg
Ly8gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3MTQxNT4gSW1wbGVtZW50IHRoZSBgbXV0ZWQtZXJy
b3JzYCBwcm9wZXJ0eSBvZiBTY3JpcHRzIHRvIGF2b2lkIG9uZXJyb3Ivb251bmhhbmRsZWRyZWpl
Y3Rpb24gZm9yIGNyb3NzLW9yaWdpbiBzY3JpcHRzCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373962</attachid>
            <date>2019-07-11 15:08:14 -0700</date>
            <delta_ts>2019-07-13 20:38:57 -0700</delta_ts>
            <desc>WIP patch based on run loop</desc>
            <filename>runloop.diff</filename>
            <type>text/plain</type>
            <size>20435</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAppbmRleCA5ZjVmZGFm
Yzc4MS4uNzJkMDBlMzk4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNs
dWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgpAQCAtMjQ5LDYgKzI1MCw0NyBAQCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldE5hbWUoSlNHbG9i
YWxDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSkKICAgICB2bS52bUVudHJ5R2xvYmFs
T2JqZWN0KGV4ZWMpLT5zZXROYW1lKG5hbWUgPyBuYW1lLT5zdHJpbmcoKSA6IFN0cmluZygpKTsK
IH0KIAordm9pZCBKU0dsb2JhbENvbnRleHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhK
U0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbikKK3sKKyAgICBpZiAo
IWN0eCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRv
SlMoZnVuY3Rpb24pOworICAgIGlmICghanNPYmplY3QtPmlzRnVuY3Rpb24odm0pKSB7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldFVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGpzT2JqZWN0KSk7Cit9CisKK3ZvaWQg
SlNHbG9iYWxDb250ZXh0U2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKEpTR2xvYmFsQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uKQoreworICAgIGlmICghY3R4KSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhmdW5jdGlvbik7
CisgICAgaWYgKCFqc09iamVjdC0+aXNGdW5jdGlvbih2bSkpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm0udm1F
bnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKHZtLCBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGpzT2JqZWN0KSk7Cit9CiAKIGNsYXNzIEJhY2t0cmFjZUZ1bmN0
b3IgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgKaW5k
ZXggMWNlNzQzNTgwNGUuLjgzNTVmY2MxYThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dFJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UmVmLmgKQEAgLTE1Niw2ICsxNTYsMjQgQEAgSlNfRVhQT1JUIEpTU3RyaW5nUmVm
IEpTR2xvYmFsQ29udGV4dENvcHlOYW1lKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpIEpTQ19BUElf
QVYKICovCiBKU19FWFBPUlQgdm9pZCBKU0dsb2JhbENvbnRleHRTZXROYW1lKEpTR2xvYmFsQ29u
dGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIG5hbWUpIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEwKSwgaW9zKDguMCkpOwogCisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlICJ1
bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iIGNhbGxiYWNrIGZvciBhIGNvbnRleHQuCitAZGlz
Y3Vzc2lvbiBKU0Mtb25seSBhbHRlcm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
dW5oYW5kbGVkcmVqZWN0aW9uJykuCitAcGFyYW0gY3R4IFRoZSBKU0dsb2JhbENvbnRleHQgdG8g
c2V0IHRoZSBjYWxsYmFjayBvbi4KK0BwYXJhbSBmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rp
b24gdG8gc2V0LCB3aGljaCByZWNlaXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNv
biBhcyBhcmd1bWVudHMuCisqLworSlNfRVhQT1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24pOworCisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlICJsYXRl
LWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iIGNhbGxiYWNrIGZvciBhIGNvbnRleHQuCitAZGlz
Y3Vzc2lvbiBKU0Mtb25seSBhbHRlcm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
cmVqZWN0aW9uaGFuZGxlZCcpLgorQHBhcmFtIGN0eCBUaGUgSlNHbG9iYWxDb250ZXh0IHRvIHNl
dCB0aGUgY2FsbGJhY2sgb24uCitAcGFyYW0gZnVuY3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIHNldCwgd2hpY2ggcmVjZWl2ZXMgdGhlIHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24g
YXMgYXJndW1lbnRzLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldFJlamVj
dGlvbkhhbmRsZWRDYWxsYmFjayhKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBm
dW5jdGlvbik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcAppbmRleCAxY2ZkNGMwM2EwOC4uMmYzNWQz
MjdhYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcApA
QCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bWJvbHNEZWxldGVQcm9wZXJ0
eUZvcktleSgpOwogICAgIHZvaWQgcHJvbWlzZVJlc29sdmVUcnVlKCk7CiAgICAgdm9pZCBwcm9t
aXNlUmVqZWN0VHJ1ZSgpOworICAgIHZvaWQgcHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrcygpOwog
CiAgICAgaW50IGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKQEAgLTQ1NCw3
ICs0NTUsNyBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZXNvbHZlVHJ1ZSgpCiAKICAgICBhdXRv
IHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0cnVlKTsKICAgICBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlc29sdmUsIHJlc29sdmUsIDEsICZ0cnVlVmFs
dWUsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hv
dWxkIGJlIHRocm93biByZXNvbHZlIHByb21pc2UiKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAi
Tm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gcmVzb2x2aW5nIHByb21pc2UiKTsKICAgICBj
aGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAidGhlbiByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2
ZSBiZWVuIGNhbGxlZC4iKTsKIH0KIApAQCAtNDc5LDcgKzQ4MCw3IEBAIHZvaWQgVGVzdEFQSTo6
cHJvbWlzZVJlamVjdFRydWUoKQogCiAgICAgQVBJU3RyaW5nIGNhdGNoU3RyaW5nKCJjYXRjaCIp
OwogICAgIEpTVmFsdWVSZWYgY2F0Y2hGdW5jdGlvbiA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgcHJvbWlzZSwgY2F0Y2hTdHJpbmcsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNl
cHRpb24gJiYgY2F0Y2hGdW5jdGlvbiAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2F0Y2hG
dW5jdGlvbiksICJQcm9taXNlIHNob3VsZCBoYXZlIGEgdGhlbiBvYmplY3QgcHJvcGVydHkiKTsK
KyAgICBjaGVjayghZXhjZXB0aW9uICYmIGNhdGNoRnVuY3Rpb24gJiYgSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIGNhdGNoRnVuY3Rpb24pLCAiUHJvbWlzZSBzaG91bGQgaGF2ZSBhIGNhdGNoIG9i
amVjdCBwcm9wZXJ0eSIpOwogCiAgICAgSlNWYWx1ZVJlZiBwYXNzZWRUcnVlRnVuY3Rpb24gPSBK
U09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCB0cnVlU3RyaW5nLCBwYXNz
ZWRUcnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8
SlNPYmplY3RSZWY+KGNhdGNoRnVuY3Rpb24pLCBwcm9taXNlLCAxLCAmcGFzc2VkVHJ1ZUZ1bmN0
aW9uLCAmZXhjZXB0aW9uKTsKQEAgLTQ4Nyw4ICs0ODgsNDEgQEAgdm9pZCBUZXN0QVBJOjpwcm9t
aXNlUmVqZWN0VHJ1ZSgpCiAKICAgICBhdXRvIHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCB0cnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJl
amVjdCwgcmVqZWN0LCAxLCAmdHJ1ZVZhbHVlLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhj
ZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gcmVzb2x2ZSBwcm9taXNlIik7
Ci0gICAgY2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgInRoZW4gcmVzcG9uc2UgZnVuY3Rpb24gc2hv
dWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2Vw
dGlvbiBzaG91bGQgYmUgdGhyb3duIHJlamVjdGluZyBwcm9taXNlIik7CisgICAgY2hlY2socGFz
c2VkVHJ1ZUNhbGxlZCwgImNhdGNoIHJlc3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4g
Y2FsbGVkLiIpOworfQorCit2b2lkIFRlc3RBUEk6OnByb21pc2VSZWplY3Rpb25DYWxsYmFja3Mo
KQoreworICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKKyAgICBhdXRvIHByb21pc2UgPSBKU09iamVj
dE1ha2VEZWZlcnJlZFByb21pc2UoY29udGV4dCwgbnVsbHB0ciwgJnJlamVjdCwgbnVsbHB0cik7
CisKKyAgICBzdGF0aWMgVGVzdEFQSSogdGVzdGVyID0gdGhpczsKKyAgICBzdGF0aWMgYXV0byBo
YW5kbGVyQ2FsbENvdW50ID0gMDsKKworICAgIGF1dG8gaGFuZGxlciA9IFtdKEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKSAtPiBKU1ZhbHVlUmVmIHsK
KyAgICAgICAgLy8gVGhpcyBsYW1iZGEgaXNuJ3QgYWxsb3dlZCB0byBjYXB0dXJlLCBzbyBqdXN0
IGNoZWNrIHRoYXQgd2UgaGF2ZSBhIHRoZW5hYmxlIG9iamVjdC4uLgorICAgICAgICB0ZXN0ZXIt
PmNoZWNrKGFyZ3VtZW50Q291bnQgJiYgSlNPYmplY3RHZXRQcm9wZXJ0eShjdHgsIGNvbnN0X2Nh
c3Q8SlNPYmplY3RSZWY+KGFyZ3VtZW50c1swXSksIEFQSVN0cmluZygidGhlbiIpLCBudWxscHRy
KSwgImNhbGxiYWNrIHNob3VsZCBnZXQgcHJvbWlzZSBhcyBmaXJzdCBwYXJhbWV0ZXIiKTsKKyAg
ICAgICAgdGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ID09IDIgJiYgSlNWYWx1ZUlzU3RyaWN0
RXF1YWwoY3R4LCBhcmd1bWVudHNbMV0sIEpTVmFsdWVNYWtlQm9vbGVhbihjdHgsIHRydWUpKSwg
ImNhbGxiYWNrIHNob3VsZCBnZXQgcmVzdWx0IGFzIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAg
ICAgaGFuZGxlckNhbGxDb3VudCsrOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY3R4KTsKKyAgICB9OworICAgIGF1dG8gaGFuZGxlckZ1bmN0aW9uID0gSlNPYmplY3RNYWtl
RnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgQVBJU3RyaW5nKCJoYW5kbGVyIiksIGhhbmRs
ZXIpOworCisgICAgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2so
Y29udGV4dCwgaGFuZGxlckZ1bmN0aW9uKTsKKworICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1
ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRydWUpOworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24o
Y29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEsICZ0cnVlVmFsdWUsIG51bGxwdHIpOworICAgIGNo
ZWNrKGhhbmRsZXJDYWxsQ291bnQgPT0gMSwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sg
c2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiKTsKKworICAgIGF1dG8gbm9vcEZ1bmN0aW9uID0gSlNP
YmplY3RNYWtlRnVuY3Rpb24oY29udGV4dCwgQVBJU3RyaW5nKCJub29wIiksIDAsIG51bGxwdHIs
IEFQSVN0cmluZygiIiksIG51bGxwdHIsIDEsIG51bGxwdHIpOworCisgICAgSlNHbG9iYWxDb250
ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soY29udGV4dCwgbm9vcEZ1bmN0aW9uKTsK
KyAgICBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soY29udGV4dCwg
aGFuZGxlckZ1bmN0aW9uKTsKKworICAgIGF1dG8gY2F0Y2hGdW5jdGlvbiA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgcHJvbWlzZSwgQVBJU3RyaW5nKCJjYXRjaCIpLCBudWxscHRyKTsK
KyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RS
ZWY+KGNhdGNoRnVuY3Rpb24pLCBwcm9taXNlLCAxLCAmbm9vcEZ1bmN0aW9uLCBudWxscHRyKTsK
KyAgICBjaGVjayhoYW5kbGVyQ2FsbENvdW50ID09IDIsICJyZWplY3Rpb24gaGFuZGxlZCBjYWxs
YmFjayBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCIpOwogfQogCiAjZGVmaW5lIFJVTih0ZXN0KSBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTIxLDYgKzU1NSw3IEBA
IGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHN5bWJvbHNE
ZWxldGVQcm9wZXJ0eUZvcktleSgpKTsKICAgICBSVU4ocHJvbWlzZVJlc29sdmVUcnVlKCkpOwog
ICAgIFJVTihwcm9taXNlUmVqZWN0VHJ1ZSgpKTsKKyAgICBSVU4ocHJvbWlzZVJlamVjdGlvbkNh
bGxiYWNrcygpKTsKIAogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YUxv
Z0xuKCJGaWx0ZXJlZCBhbGwgdGVzdHM6IEVSUk9SIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4
IGQ0ZmEyMjJjNzIxLi4wYWM4NTQxMzUzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTM3Nyw2
ICszNzcsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRp
c2FibGVSaWNoU291cmNlSW5mbyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFsbG9jSW5BTG9vcChFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVG90YWxDb21waWxlVGltZShFeGVj
U3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
ZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNr
KEV4ZWNTdGF0ZSopOworCiBzdHJ1Y3QgU2NyaXB0IHsKICAgICBlbnVtIGNsYXNzIFN0cmljdE1v
ZGUgewogICAgICAgICBTdHJpY3QsCkBAIC02MzEsNiArNjM0LDkgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBhZGRGdW5jdGlvbih2bSwgImRpc2FibGVSaWNoU291cmNlSW5mbyIsIGZ1bmN0aW9uRGlz
YWJsZVJpY2hTb3VyY2VJbmZvLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJtYWxsb2NJ
bkFMb29wIiwgZnVuY3Rpb25NYWxsb2NJbkFMb29wLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJ0b3RhbENvbXBpbGVUaW1lIiwgZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lLCAwKTsKKwor
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrIiwg
ZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaywgMSk7CisgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAic2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrIiwgZnVuY3Rpb25TZXRSZWpl
Y3Rpb25IYW5kbGVkQ2FsbGJhY2ssIDEpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZEZ1bmN0
aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKQEAgLTIzODMsNiArMjM4OSwzMiBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldlYkFzc2VtYmx5
TWVtb3J5TW9kZShFeGVjU3RhdGUqIGV4ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVq
ZWN0aW9uQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUuaXNGdW5jdGlv
bih2bSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpKTsKKworICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c2V0VW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2sodm0sIGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB2
YWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVk
Q2FsbGJhY2soRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbih2bSkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUpKTsKKworICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c2V0UmVqZWN0aW9uSGFu
ZGxlZENhbGxiYWNrKHZtLCBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgdmFsdWUpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiAvLyBVc2Ug
U0VIIGZvciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9y
dCBkaWFsb2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBhbmQg
RGVidWcgYnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBm
dW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggMDI2
MDdjOTI3NDguLjdiZmZmYjQwM2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyNyw2ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICBT
dHJpbmcgbV9uYW1lOwogCisgICAgU3Ryb25nPEpTRnVuY3Rpb24+IG1fdW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2s7CisgICAgU3Ryb25nPEpTRnVuY3Rpb24+IG1fcmVqZWN0aW9uSGFuZGxlZENh
bGxiYWNrOworCiAgICAgRGVidWdnZXIqIG1fZGVidWdnZXI7CiAKICAgICBWTSYgbV92bTsKQEAg
LTgwNyw2ICs4MTAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcm
KTsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAor
ICAgIHZvaWQgc2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soVk0mIHZtLCBKU0Z1bmN0aW9u
KiBmdW5jdGlvbikgeyBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLnNldCh2bSwgZnVuY3Rp
b24pOyB9CisgICAgSlNGdW5jdGlvbiogdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKSBjb25z
dCB7IHJldHVybiBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLmdldCgpOyB9CisKKyAgICB2
b2lkIHNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uKSB7IG1fcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9Cisg
ICAgSlNGdW5jdGlvbiogcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9yZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2suZ2V0KCk7IH0KKwogICAgIEpTT2JqZWN0KiBhcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVy
ZS5jb25zdHJ1Y3Rvcih0aGlzKTsgfQogCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVyUHJvdG90
eXBlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUgc2hhcmluZ01vZGUpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAKaW5kZXggMDgxMTRjYTY5NjAuLjMzOTRiZTAwMGRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
CkBAIC03NjYsMTAgKzc2NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIoRXhlY1N0YXRlKiBleAogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpCisgICAgSlNQcm9taXNlKiBwcm9taXNlID0g
anNDYXN0PEpTUHJvbWlzZSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKKworICAgIC8vIEludGVybmFs
UHJvbWlzZXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHVzZXIgc2NyaXB0cy4KKyAgICBpZiAo
cHJvbWlzZS0+aW5oZXJpdHM8SlNJbnRlcm5hbFByb21pc2U+KHZtKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIEpTUHJvbWlzZSogcHJvbWlz
ZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgSlNWYWx1ZSBv
cGVyYXRpb25WYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAgICAgQVNTRVJUKG9wZXJhdGlv
blZhbHVlLmlzTnVtYmVyKCkpOwpAQCAtNzc3LDcgKzc3OSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIoRXhlY1N0
YXRlKiBleAogICAgIEFTU0VSVChvcGVyYXRpb24gPT0gSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0
aW9uOjpSZWplY3QgfHwgb3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6
SGFuZGxlKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCi0gICAgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcihn
bG9iYWxPYmplY3QsIGV4ZWMsIHByb21pc2UsIG9wZXJhdGlvbik7CisgICAgaWYgKGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIp
IHsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9t
aXNlUmVqZWN0aW9uVHJhY2tlcihnbG9iYWxPYmplY3QsIGV4ZWMsIHByb21pc2UsIG9wZXJhdGlv
bik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdDoKKyAgICAgICAgICAgIHZt
LnByb21pc2VSZWplY3RlZChwcm9taXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6SGFuZGxlOgorICAgICAgICAgICAgdm0u
cHJvbWlzZUhhbmRsZWQocHJvbWlzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCAyNWVmOTQ1Y2JlNS4uZmFkMzY3MzAyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKQEAgLTMxNyw2ICszMTcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudCgw
KQogICAgICwgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoSXNXYXRjaGVkKQogICAgICwgbV9j
b250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZENvdW50KDApCisgICAgLCBtX291dHN0YW5kaW5nUmVq
ZWN0ZWRQcm9taXNlcygqdGhpcykKIHsKICAgICBpZiAoVU5MSUtFTFkodm1DcmVhdGlvblNob3Vs
ZENyYXNoKSkKICAgICAgICAgQ1JBU0hfV0lUSF9JTkZPKDB4NDI0MjQyNDIyMDIwMjAyMCwgMHhi
YWRiZWVmMGJhZGJlZWYsIDB4MTIzNDEyMzQxMjM0MTIzNCwgMHgxMzM3MTMzNzEzMzcxMzM3KTsK
QEAgLTEwODksNiArMTA5MCw5MSBAQCB2b2lkIFZNOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8TWljcm90YXNrPiYmIHRhc2spCiAgICAgbV9taWNyb3Rh
c2tRdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxRdWV1ZWRUYXNrPigqdGhpcywgJmdsb2Jh
bE9iamVjdCwgV1RGTW92ZSh0YXNrKSkpOwogfQogCit2b2lkIFZNOjpjYWxsUHJvbWlzZVJlamVj
dGlvbkNhbGxiYWNrKEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbiBvcGVyYXRpb24sIEpTUHJv
bWlzZSogcHJvbWlzZSkKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsYmFjayA9IG9wZXJhdGlvbiA9
PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdAorICAgICAgICA/IHByb21pc2Ut
Pmdsb2JhbE9iamVjdCgpLT51bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpCisgICAgICAgIDog
cHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPnJlamVjdGlvbkhhbmRsZWRDYWxsYmFjaygpOworCisg
ICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUoKnRoaXMpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSgqdGhpcywgY2FsbGJhY2ssIGNhbGxEYXRh
KTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZChwcm9taXNlKTsKKyAgICBhcmdz
LmFwcGVuZChwcm9taXNlLT5yZXN1bHQoKnRoaXMpKTsKKyAgICBjYWxsKHByb21pc2UtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpz
TnVsbCgpLCBhcmdzKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworfQorCit2b2lkIFZN
OjpyZXBvcnRVbmhhbmRsZWRSZWplY3Rpb25zU29vbigpCit7CisgICAgaWYgKG1fYWJvdXRUb0Jl
Tm90aWZpZWRSZWplY3RlZFByb21pc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZSgqdGhpcywgbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuZmlyc3QoKS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdGhpcyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fYWJv
dXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzLmZpcnN0KCktPmdsb2JhbE9iamVjdCgpOwor
ICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlD
cmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIHByb21pc2VEZWZlcnJlZFRp
bWVyLT5hZGRQZW5kaW5nUHJvbWlzZSgqdGhpcywgZGVmZXJyZWQsIHsgfSk7CisKKyAgICBkYXRh
TG9nTG4oIm91dHNpZGUgdW5oYW5kbGVkIGxhbWJkYSIpOworICAgIHByb21pc2VEZWZlcnJlZFRp
bWVyLT5zY2hlZHVsZVdvcmtTb29uKGRlZmVycmVkLCBbdGhpc10gKCkgbXV0YWJsZSB7CisgICAg
ICAgIGRhdGFMb2dMbigiaW5zaWRlIHVuaGFuZGxlZCBsYW1iZGEiKTsKKyAgICAgICAgYXV0byB1
bmhhbmRsZWRSZWplY3Rpb25zID0gV1RGTW92ZShtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQ
cm9taXNlcyk7CisgICAgICAgIGZvciAoYXV0byYgcHJvbWlzZSA6IHVuaGFuZGxlZFJlamVjdGlv
bnMpIHsKKyAgICAgICAgICAgIGlmIChwcm9taXNlLT5pc0hhbmRsZWQoKnRoaXMpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjYWxsUHJvbWlzZVJlamVjdGlvbkNh
bGxiYWNrKEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0LCBwcm9taXNlLmdldCgp
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9taXNlLT5pc0hhbmRsZWQoKnRoaXMpKQorICAgICAg
ICAgICAgICAgIG1fb3V0c3RhbmRpbmdSZWplY3RlZFByb21pc2VzLnNldChwcm9taXNlLmdldCgp
LCBwcm9taXNlLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIFZNOjpwcm9t
aXNlUmVqZWN0ZWQoSlNQcm9taXNlKiBwcm9taXNlKQoreworICAgIG1fYWJvdXRUb0JlTm90aWZp
ZWRSZWplY3RlZFByb21pc2VzLmNvbnN0cnVjdEFuZEFwcGVuZCgqdGhpcywgcHJvbWlzZSk7Cit9
CisKK3ZvaWQgVk06OnByb21pc2VIYW5kbGVkKEpTUHJvbWlzZSogcHJvbWlzZSkKK3sKKyAgICBi
b29sIHJlbW92ZWQgPSBtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcy5yZW1vdmVG
aXJzdE1hdGNoaW5nKFtwcm9taXNlXSAoU3Ryb25nPEpTUHJvbWlzZT4mIHVuaGFuZGxlZFByb21p
c2UpIHsKKyAgICAgICAgcmV0dXJuIHVuaGFuZGxlZFByb21pc2UuZ2V0KCkgPT0gcHJvbWlzZTsK
KyAgICB9KTsKKworICAgIGlmIChyZW1vdmVkIHx8ICFtX291dHN0YW5kaW5nUmVqZWN0ZWRQcm9t
aXNlcy5yZW1vdmUocHJvbWlzZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEpTUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoKnRoaXMsIHBy
b21pc2UsIG51bGxwdHIsIG51bGxwdHIpOworICAgIC8vIHByb21pc2VEZWZlcnJlZFRpbWVyLT5h
ZGRQZW5kaW5nUHJvbWlzZSgqdGhpcywgZGVmZXJyZWQsIHsgfSk7CisKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdGhpcyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHByb21pc2UtPmdsb2JhbE9iamVjdCgpOworICAgIEpTUHJvbWlzZURlZmVycmVk
KiBkZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwor
ICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4oKnRoaXMsIHByb21pc2UpKTsK
KyAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UoKnRoaXMsIGRlZmVy
cmVkLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAgZGF0YUxvZ0xuKCJvdXRzaWRlIGhh
bmRsZWQgbGFtYmRhIik7CisgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nv
b24oZGVmZXJyZWQsIFt0aGlzLCBwcm9taXNlXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgZGF0YUxv
Z0xuKCJpbnNpZGUgaGFuZGxlZCBsYW1iZGEiKTsKKyAgICAgICAgY2FsbFByb21pc2VSZWplY3Rp
b25DYWxsYmFjayhKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZSwgcHJvbWlzZSk7
CisgICAgfSk7Cit9CisKIHZvaWQgVk06OmRyYWluTWljcm90YXNrcygpCiB7CiAgICAgd2hpbGUg
KCFtX21pY3JvdGFza1F1ZXVlLmlzRW1wdHkoKSkgewpAQCAtMTA5Nyw2ICsxMTgzLDcgQEAgdm9p
ZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkKICAgICAgICAgICAgIG1fb25FYWNoTWljcm90YXNrVGlj
aygqdGhpcyk7CiAgICAgfQogICAgIGZpbmFsaXplU3luY2hyb25vdXNKU0V4ZWN1dGlvbigpOwor
ICAgIHJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnNTb29uKCk7CiB9CiAKIHZvaWQgUXVldWVkVGFz
azo6cnVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDkwMTQ5N2IyOTQ0Li5l
N2Q5ZGE1ZTk2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMjMsNiArMTIz
LDcgQEAgY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKIGNsYXNzIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBK
U09iamVjdDsKK2NsYXNzIEpTUHJvbWlzZTsKIGNsYXNzIEpTUnVuTG9vcFRpbWVyOwogY2xhc3Mg
SlNTdHJpbmdIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlOwpAQCAtMTcyLDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBET01KSVQgewogY2xhc3MgU2ln
bmF0dXJlOwogfQogCitlbnVtIGNsYXNzIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbiA6IHVu
c2lnbmVkOworCiBzdHJ1Y3QgRW50cnlGcmFtZTsKIHN0cnVjdCBIYXNoVGFibGU7CiBzdHJ1Y3Qg
SW5zdHJ1Y3Rpb247CkBAIC05MjAsNiArOTIzLDkgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5
TmVlZFRlcm1pbmF0aW9uKCkgeyBtX3RyYXBzLmZpcmVUcmFwKFZNVHJhcHM6Ok5lZWRUZXJtaW5h
dGlvbik7IH0KICAgICB2b2lkIG5vdGlmeU5lZWRXYXRjaGRvZ0NoZWNrKCkgeyBtX3RyYXBzLmZp
cmVUcmFwKFZNVHJhcHM6Ok5lZWRXYXRjaGRvZ0NoZWNrKTsgfQogCisgICAgdm9pZCBwcm9taXNl
UmVqZWN0ZWQoSlNQcm9taXNlKik7CisgICAgdm9pZCBwcm9taXNlSGFuZGxlZChKU1Byb21pc2Uq
KTsKKwogI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogICAgIFN0YWNr
VHJhY2UqIG5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RUaHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0
aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93LmdldCgpOyB9CiAgICAgVGhyZWFkKiB0aHJvd2luZ1Ro
cmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyb3dpbmdUaHJlYWQuZ2V0KCk7IH0KQEAgLTEwMDUs
NiArMTAxMSw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VE
aXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKICAgICB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJs
ZWQoKTsKIAorICAgIHZvaWQgY2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhKU1Byb21pc2VS
ZWplY3Rpb25PcGVyYXRpb24sIEpTUHJvbWlzZSopOworICAgIHZvaWQgcmVwb3J0VW5oYW5kbGVk
UmVqZWN0aW9uc1Nvb24oKTsKKwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKICNlbmRpZgpAQCAtMTA2MCw2
ICsxMDY5LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93Q2hpY2tlbj4g
bV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUludHJpbnNpY1Jl
Z2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICBWZWN0b3I8U3Ryb25n
PEpTUHJvbWlzZT4+IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzOworICAgIFdl
YWtHQ01hcDxKU1Byb21pc2UqLCBKU1Byb21pc2U+IG1fb3V0c3RhbmRpbmdSZWplY3RlZFByb21p
c2VzOworCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFZNJik+IG1fb25FYWNoTWljcm90YXNrVGlj
azsKICAgICB1aW50cHRyX3QgbV9jdXJyZW50V2Vha1JlZlZlcnNpb24geyAwIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3
ODhlMmU2NzdmNy4uODAzMGQzNTQwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTIxNiwxNiArMjE2LDExIEBAIHZvaWQgSlNE
T01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0KiBq
c0dsb2JhbE9iamVjdCwKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211
bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tlci1p
bXBsZW1lbnRhdGlvbgogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvJiBnbG9i
YWxPYmplY3QgPSAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihqc0dsb2JhbE9iamVj
dCk7CiAgICAgYXV0byogY29udGV4dCA9IGdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJbnRl
cm5hbFByb21pc2VzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCi0gICAg
aWYgKEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTSW50ZXJuYWxQcm9taXNlKj4odm0sIHByb21p
c2UpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBGSVhNRTogSWYgc2NyaXB0IGhhcyBtdXRl
ZCBlcnJvcnMgKGNyb3NzIG9yaWdpbiksIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy4KICAgICAvLyA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTcxNDE1PiBJbXBsZW1lbnQgdGhlIGBtdXRlZC1lcnJvcnNg
IHByb3BlcnR5IG9mIFNjcmlwdHMgdG8gYXZvaWQgb25lcnJvci9vbnVuaGFuZGxlZHJlamVjdGlv
biBmb3IgY3Jvc3Mtb3JpZ2luIHNjcmlwdHMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374097</attachid>
            <date>2019-07-14 16:07:26 -0700</date>
            <delta_ts>2019-07-30 17:20:19 -0700</delta_ts>
            <desc>WIP patch based on run loop</desc>
            <filename>bug-197172-20190714160726.patch</filename>
            <type>text/plain</type>
            <size>25518</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ODQ1NjQxZTkxMGQxZTVjYWVhNjcyYmNkMDYxYjMzYTk0YmUxZjRmLi5kYWNlNTllYmE3N2Q1Yjcy
ZDg2YWY4NmZjODdlNDAwNzhkMjA1MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MSBAQAorMjAxOS0wNy0xNCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIGNhbGxiYWNrcyBmb3IgdW5oYW5kbGVkIGFu
ZCBsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIHRvIGJlIHNldCB2aWEgSlNDJ3MgcHVi
bGljIEMgQVBJLgorICAgICAgICBTaW5jZSB0aGVyZSBpcyBubyB0YXNrIHF1ZXVlIGluIHN1Y2gg
YW4gZW52aXJvbm1lbnQsIHRoZXNlIGNhbGxiYWNrcyBmaXJlIG9mZiBvZiB0aGUgcnVuIGxvb3Au
CisgICAgICAgIENhbGxiYWNrcyByZWNlaXZlIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVh
c29uIGFzIGFyZ3VtZW50cyBhbmQgdGhlaXIgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCisKKyAg
ICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0dsb2JhbENv
bnRleHRTZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBBUEkv
SlNDb250ZXh0UmVmLmg6CisgICAgICAgIEFkZCBuZXcgcHVibGljIEFQSSBjYWxscy4KKworICAg
ICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmNwcDoKKyAgICAgICAgKFRlc3RBUEk6OnByb21pc2VS
ZXNvbHZlVHJ1ZSk6IENsZWFuIHVwIHRlc3Qgb3V0cHV0LgorICAgICAgICAoVGVzdEFQSTo6cHJv
bWlzZVJlamVjdFRydWUpOiBDbGVhbiB1cCB0ZXN0IG91dHB1dC4KKyAgICAgICAgKFRlc3RBUEk6
OnByb21pc2VSZWplY3Rpb25DYWxsYmFja3MpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDQVBJVmlh
Q3BwKToKKyAgICAgICAgQWRkIG5ldyBDKysgQVBJIHRlc3QuCisKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5j
dGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChmdW5j
dGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayk6IEFkZGVkLgorICAgICAgICBBZGQgY29y
cmVzcG9uZGluZyBnbG9iYWxzIHRvIEpTQyBzaGVsbC4KKworICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnNldFVuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayBjb25zdCk6IEFkZGVkLgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKTogQWRkZWQuCisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2sgY29u
c3QpOiBBZGRlZC4KKyAgICAgICAgS2VlcCBzdHJvbmcgcmVmZXJlbmNlcyB0byB0aGUgY2FsbGJh
Y2tzLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Omdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIpOgorICAg
ICAgICBBZGQgZGVmYXVsdCBiZWhhdmlvci4KKworICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Y2FsbFByb21pc2VSZWpl
Y3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTTo6cmVwb3J0VW5oYW5kbGVk
UmVqZWN0aW9uc1Nvb24pOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Vk06OnByb21pc2VSZWplY3Rl
ZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTTo6cHJvbWlzZUhhbmRsZWQpOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6Vk06OmRyYWluTWljcm90YXNrcyk6CisgICAgICAgIE1pbWljIFJlamVjdGVk
UHJvbWlzZVRyYWNrZXIgdXNpbmcgdGhlIHJ1biBsb29wICh2aWEgUHJvbWlzZURlZmVycmVkVGlt
ZXIpLgorICAgICAgICBTcGVjaWZpY2FsbHk6CisgICAgICAgICAgMS4gV2hlbiBhIHByb21pc2Ug
cmVqZWN0aW9uIGdvZXMgdW5oYW5kbGVkLCBzdG9yZSB0aGUgcHJvbWlzZSBmb3IgbGF0ZXIgcmVw
b3J0aW5nLgorICAgICAgICAgIDIuIEFmdGVyIGRyYWluaW5nIG1pY3JvdGFza3MsIHNjaGVkdWxl
IHJlcG9ydGluZyBvZiBhbnkgc3RvcmVkIHVuaGFuZGxlZCByZWplY3Rpb25zLgorICAgICAgICAg
IDMuIElmIGFuIGFscmVhZHktcmVwb3J0ZWQgKGFuZCBub3QteWV0LUdDZWQpIHJlamVjdGlvbiBn
ZXRzIGhhbmRsZWQgYXQgYSBsYXRlciB0aW1lLAorICAgICAgICAgICAgIGltbWVkaWF0ZWx5IHNj
aGVkdWxlIGl0IHRvIGJlIHJlcG9ydGVkLgorCisgICAgICAgICogcnVudGltZS9WTS5oOgorICAg
ICAgICBTdG9yZSB1bmhhbmRsZWQgcmVqZWN0aW9ucyAodGhlc2UgY29sbGVjdGlvbnMgd2lsbCBh
bHdheXMgYmUgZW1wdHkgaW4gdGhlIHByZXNlbmNlIG9mIFdlYkNvcmUpLgorCiAyMDE5LTA3LTEy
ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBB
UEkgdG8gZ2V0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIG9mIGEgZ2l2ZW4gSlNTY3JpcHQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxNWQ2OTNjZjE0YjFmZGExYzM2NzQ1MjViMDljZTQ1ZWYzOTI3MjY2Li45OTE2OWQz
MTAyMDU0NmYyOGEwMmIwYjRkM2IxYjdjNzYwN2I1ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTktMDctMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29t
PgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBwdWJsaWMgQVBJIGZvciB1bmhhbmRsZWQgcHJv
bWlzZSByZWplY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTcxNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAg
ICAgIE1vdmUgSlNJbnRlcm5hbFByb21pc2UgZWFybHktb3V0IHRvIEpTQyBzaWRlLgorCiAyMDE5
LTA3LTEyICBUaGliYXVsdCBTYXVuaWVyICA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1N0cmVhbWVyXSBNb2NrIEdTdHJlYW1lciByZWFsdGltZSBzb3VyY2VzIHNob3VsZCBrZWVw
IGEgUmVmIG9mIHRoZWlyIG1vY2sgcmVhbHRpbWUgbWVkaWEgc291cmNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCmluZGV4IDlmNWZkYWZjNzgxOTZmZTQ0OGMx
OGQwNzkxNWUwNGZhMzg2ODRhYWEuLjg3M2VlYmFjZGY4MmIwYzIxNmFmMGMxZjdhYTIwMWQ3MGY4
ZWUzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NvbnRleHRSZWZJbnRlcm5hbC5oIgogCiAjaW5j
bHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkFQSVV0aWxzLmgiCiAjaW5jbHVkZSAiQ2FsbEZy
YW1lLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTQVBJ
R2xvYmFsT2JqZWN0LmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgi
CisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KQEAgLTI0OSw2ICsyNTEsNDUgQEAgdm9pZCBKU0dsb2JhbENvbnRleHRTZXROYW1l
KEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIG5hbWUpCiAgICAgdm0udm1FbnRy
eUdsb2JhbE9iamVjdChleGVjKS0+c2V0TmFtZShuYW1lID8gbmFtZS0+c3RyaW5nKCkgOiBTdHJp
bmcoKSk7CiB9CiAKK3ZvaWQgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2Fs
bGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWN0eCkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMoZnVuY3Rpb24pOwor
ICAgIGlmICghb2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkgeworICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldFVuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrKHZtLCBvYmplY3QpOworfQorCit2b2lkIEpTR2xvYmFsQ29udGV4dFNldFJlamVjdGlv
bkhhbmRsZWRDYWxsYmFjayhKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmICghY3R4KSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhm
dW5jdGlvbik7CisgICAgaWYgKCFvYmplY3QtPmlzRnVuY3Rpb24odm0pKSB7CisgICAgICAgICpl
eGNlcHRpb24gPSB0b1JlZihjcmVhdGVUeXBlRXJyb3IoZXhlYykpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0UmVqZWN0aW9u
SGFuZGxlZENhbGxiYWNrKHZtLCBvYmplY3QpOworfQogCiBjbGFzcyBCYWNrdHJhY2VGdW5jdG9y
IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5oCmluZGV4
IDFjZTc0MzU4MDRlYmI5YmM0N2Y3YzFmMGQ5ZTk0ZmMwNzg5ODhjMGIuLjQ3MmFlOGJkMGQxMWQ4
YzEyZWE4ZmQ2NDc0NzY2ODMxNzRlNzI3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHRSZWYuaApAQCAtMTU2LDYgKzE1NiwyNiBAQCBKU19FWFBPUlQgSlNTdHJpbmdSZWYg
SlNHbG9iYWxDb250ZXh0Q29weU5hbWUoSlNHbG9iYWxDb250ZXh0UmVmIGN0eCkgSlNDX0FQSV9B
VgogKi8KIEpTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldE5hbWUoSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSkgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTApLCBpb3MoOC4wKSk7CiAKKy8qIQorQGZ1bmN0aW9uCitAYWJzdHJhY3QgU2V0cyB0aGUgInVu
aGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIgY2FsbGJhY2sgZm9yIGEgY29udGV4dC4KK0BkaXNj
dXNzaW9uIEpTQy1vbmx5IGFsdGVybmF0aXZlIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1
bmhhbmRsZWRyZWplY3Rpb24nKS4KK0BwYXJhbSBjdHggVGhlIEpTR2xvYmFsQ29udGV4dCB0byBz
ZXQgdGhlIGNhbGxiYWNrIG9uLgorQHBhcmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlv
biB0byBzZXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVhc29u
IGFzIGFyZ3VtZW50cy4KK0BwYXJhbSBleGNlcHRpb24gQSBwb2ludGVyIHRvIGEgSlNWYWx1ZVJl
ZiBpbiB3aGljaCB0byBzdG9yZSBhbiBleGNlcHRpb24sIGlmIGFueS4gUGFzcyBOVUxMIGlmIHlv
dSBkbyBub3QgY2FyZSB0byBzdG9yZSBhbiBleGNlcHRpb24uCisqLworSlNfRVhQT1JUIHZvaWQg
SlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CisKKy8qIQorQGZ1bmN0aW9uCitAYWJzdHJhY3QgU2V0cyB0aGUgImxhdGUtaGFuZGxlZCBwcm9t
aXNlIHJlamVjdGlvbiIgY2FsbGJhY2sgZm9yIGEgY29udGV4dC4KK0BkaXNjdXNzaW9uIEpTQy1v
bmx5IGFsdGVybmF0aXZlIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZWplY3Rpb25oYW5k
bGVkJykuCitAcGFyYW0gY3R4IFRoZSBKU0dsb2JhbENvbnRleHQgdG8gc2V0IHRoZSBjYWxsYmFj
ayBvbi4KK0BwYXJhbSBmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0LCB3aGlj
aCByZWNlaXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNvbiBhcyBhcmd1bWVudHMu
CitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBhIEpTVmFsdWVSZWYgaW4gd2hpY2ggdG8g
c3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3MgTlVMTCBpZiB5b3UgZG8gbm90IGNhcmUg
dG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4
dFNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKwogI2lmZGVmIF9fY3Bs
dXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkuY3BwCmluZGV4IDFjZmQ0YzAzYTA4YmFkNDIyZTk0MTQxODg1YmM5N2MwZThkMGViNjYuLjA4
YzlkODI4YzNhNTYwYmMzMTFkZjM4NjhmYjY0Y2I2YjVjZGNiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN5bWJvbHNEZWxldGVQcm9wZXJ0eUZvcktleSgpOwogICAgIHZvaWQgcHJv
bWlzZVJlc29sdmVUcnVlKCk7CiAgICAgdm9pZCBwcm9taXNlUmVqZWN0VHJ1ZSgpOworICAgIHZv
aWQgcHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrcygpOwogCiAgICAgaW50IGZhaWxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKQEAgLTQ1NCw3ICs0NTUsNyBAQCB2b2lkIFRlc3RBUEk6
OnByb21pc2VSZXNvbHZlVHJ1ZSgpCiAKICAgICBhdXRvIHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCB0cnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRl
eHQsIHJlc29sdmUsIHJlc29sdmUsIDEsICZ0cnVlVmFsdWUsICZleGNlcHRpb24pOwotICAgIGNo
ZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biByZXNvbHZlIHBy
b21pc2UiKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0
aHJvd24gcmVzb2x2aW5nIHByb21pc2UiKTsKICAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAi
dGhlbiByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKIH0KIApA
QCAtNDc5LDcgKzQ4MCw3IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlamVjdFRydWUoKQogCiAg
ICAgQVBJU3RyaW5nIGNhdGNoU3RyaW5nKCJjYXRjaCIpOwogICAgIEpTVmFsdWVSZWYgY2F0Y2hG
dW5jdGlvbiA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcHJvbWlzZSwgY2F0Y2hTdHJp
bmcsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24gJiYgY2F0Y2hGdW5jdGlvbiAm
JiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2F0Y2hGdW5jdGlvbiksICJQcm9taXNlIHNob3Vs
ZCBoYXZlIGEgdGhlbiBvYmplY3QgcHJvcGVydHkiKTsKKyAgICBjaGVjayghZXhjZXB0aW9uICYm
IGNhdGNoRnVuY3Rpb24gJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhdGNoRnVuY3Rpb24p
LCAiUHJvbWlzZSBzaG91bGQgaGF2ZSBhIGNhdGNoIG9iamVjdCBwcm9wZXJ0eSIpOwogCiAgICAg
SlNWYWx1ZVJlZiBwYXNzZWRUcnVlRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhD
YWxsYmFjayhjb250ZXh0LCB0cnVlU3RyaW5nLCBwYXNzZWRUcnVlKTsKICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhdGNoRnVuY3Rp
b24pLCBwcm9taXNlLCAxLCAmcGFzc2VkVHJ1ZUZ1bmN0aW9uLCAmZXhjZXB0aW9uKTsKQEAgLTQ4
Nyw4ICs0ODgsNDcgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSgpCiAKICAgICBh
dXRvIHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0cnVlKTsKICAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCAmdHJ1ZVZh
bHVlLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNo
b3VsZCBiZSB0aHJvd24gcmVzb2x2ZSBwcm9taXNlIik7Ci0gICAgY2hlY2socGFzc2VkVHJ1ZUNh
bGxlZCwgInRoZW4gcmVzcG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7
CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJl
amVjdGluZyBwcm9taXNlIik7CisgICAgY2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgImNhdGNoIHJl
c3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOworfQorCit2b2lkIFRl
c3RBUEk6OnByb21pc2VSZWplY3Rpb25DYWxsYmFja3MoKQoreworICAgIEpTT2JqZWN0UmVmIHJl
amVjdDsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIGF1
dG8gcHJvbWlzZSA9IEpTT2JqZWN0TWFrZURlZmVycmVkUHJvbWlzZShjb250ZXh0LCBudWxscHRy
LCAmcmVqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiY3JlYXRpbmcg
YSAocmVqZWN0LW9ubHkpIGRlZmVycmVkIHByb21pc2Ugc2hvdWxkIG5vdCB0aHJvdyIpOworICAg
IHN0YXRpYyBhdXRvIHJlYXNvbiA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIEFQSVN0cmlu
ZygicmVhc29uIikpOworCisgICAgc3RhdGljIFRlc3RBUEkqIHRlc3RlciA9IHRoaXM7CisgICAg
c3RhdGljIGF1dG8gY2FsbGJhY2tDYWxsQ291bnQgPSAwOworCisgICAgYXV0byBjYWxsYmFjayA9
IFtdKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKSAt
PiBKU1ZhbHVlUmVmIHsKKyAgICAgICAgdGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ICYmIEpT
VmFsdWVJc1N0cmljdEVxdWFsKGN0eCwgYXJndW1lbnRzWzBdLCBwcm9taXNlKSwgImNhbGxiYWNr
IHNob3VsZCByZWNlaXZlIHJlamVjdGVkIHByb21pc2UgYXMgZmlyc3QgYXJndW1lbnQiKTsKKyAg
ICAgICAgdGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ID4gMSAmJiBKU1ZhbHVlSXNTdHJpY3RF
cXVhbChjdHgsIGFyZ3VtZW50c1sxXSwgcmVhc29uKSwgImNhbGxiYWNrIHNob3VsZCByZWNlaXZl
IHJlamVjdGlvbiByZWFzb24gYXMgc2Vjb25kIGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+
Y2hlY2soYXJndW1lbnRDb3VudCA9PSAyLCAiY2FsbGJhY2sgc2hvdWxkIG5vdCByZWNlaXZlIGEg
dGhpcmQgYXJndW1lbnQiKTsKKyAgICAgICAgY2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAgfTsKKyAgICBhdXRvIGNhbGxi
YWNrRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBB
UElTdHJpbmcoImNhbGxiYWNrIiksIGNhbGxiYWNrKTsKKworICAgIEpTR2xvYmFsQ29udGV4dFNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrRnVuY3Rpb24sICZl
eGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJzZXR0aW5nIHVuaGFuZGxlZCByZWpl
Y3Rpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCB0aHJvdyIpOworCisgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCByZWplY3QsIHJlamVjdCwgMSwgJnJlYXNvbiwgJmV4Y2VwdGlvbik7
CisgICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYWxsYmFja0NhbGxDb3VudCA9PSAxLCAidW5oYW5k
bGVkIHJlamVjdGlvbiBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHVwb24gdW5oYW5kbGVkIHJl
amVjdGlvbiIpOworCisgICAgYXV0byBub29wRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlv
bihjb250ZXh0LCBBUElTdHJpbmcoIm5vb3AiKSwgMCwgbnVsbHB0ciwgQVBJU3RyaW5nKCIiKSwg
bnVsbHB0ciwgMSwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgImNyZWF0aW5n
IGEgbm8tb3AgZnVuY3Rpb24gc2hvdWxkIG5vdCB0aHJvdyIpOworCisgICAgSlNHbG9iYWxDb250
ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soY29udGV4dCwgbm9vcEZ1bmN0aW9uLCAm
ZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAicmVzZXR0aW5nIHVuaGFuZGxlZCBy
ZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCB0aHJvdyIpOworICAgIEpTR2xvYmFsQ29udGV4
dFNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFja0Z1bmN0aW9uLCAm
ZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAic2V0dGluZyByZWplY3Rpb24gaGFu
ZGxlZCBjYWxsYmFjayBzaG91bGQgbm90IHRocm93Iik7CisKKyAgICBhdXRvIGNhdGNoRnVuY3Rp
b24gPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHByb21pc2UsIEFQSVN0cmluZygiY2F0
Y2giKSwgJmV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBj
b25zdF9jYXN0PEpTT2JqZWN0UmVmPihjYXRjaEZ1bmN0aW9uKSwgcHJvbWlzZSwgMSwgJm5vb3BG
dW5jdGlvbiwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYWxsYmFja0Nh
bGxDb3VudCA9PSAyLCAicmVqZWN0aW9uIGhhbmRsZWQgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxl
ZCB1cG9uIGxhdGUtaGFuZGxlZCByZWplY3Rpb24iKTsKIH0KIAogI2RlZmluZSBSVU4odGVzdCkg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUyMSw2ICs1NjEsNyBA
QCBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTihzeW1ib2xz
RGVsZXRlUHJvcGVydHlGb3JLZXkoKSk7CiAgICAgUlVOKHByb21pc2VSZXNvbHZlVHJ1ZSgpKTsK
ICAgICBSVU4ocHJvbWlzZVJlamVjdFRydWUoKSk7CisgICAgUlVOKHByb21pc2VSZWplY3Rpb25D
YWxsYmFja3MoKSk7CiAKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFM
b2dMbigiRmlsdGVyZWQgYWxsIHRlc3RzOiBFUlJPUiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRl
eCBkNGZhMjIyYzcyMWNmNGE3ZTcxYWQ0Nzg2Zjk4NDExMTI0MWUxODUyLi4xOGI4NDljZWYzZWZi
NmI5NTExYmRhNjhkMDg0MGY1ZDhjZGI5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzc3
LDYgKzM3Nyw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RGlzYWJsZVJpY2hTb3VyY2VJbmZvKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWxsb2NJbkFMb29wKEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lKEV4
ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJh
Y2soRXhlY1N0YXRlKik7CisKIHN0cnVjdCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0
TW9kZSB7CiAgICAgICAgIFN0cmljdCwKQEAgLTYzMSw2ICs2MzQsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZGlzYWJsZVJpY2hTb3VyY2VJbmZvIiwgZnVuY3Rpb25E
aXNhYmxlUmljaFNvdXJjZUluZm8sIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm1hbGxv
Y0luQUxvb3AiLCBmdW5jdGlvbk1hbGxvY0luQUxvb3AsIDApOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgInRvdGFsQ29tcGlsZVRpbWUiLCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUsIDApOwor
CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2si
LCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLCAxKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJzZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2siLCBmdW5jdGlvblNldFJl
amVjdGlvbkhhbmRsZWRDYWxsYmFjaywgMSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVu
Y3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpAQCAtMjM4Myw2ICsyMzg5LDMy
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2ViQXNzZW1i
bHlNZW1vcnlNb2RlKEV4ZWNTdGF0ZSogZXhlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRVbmhhbmRsZWRS
ZWplY3Rpb25DYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYg
KCFvYmplY3QgfHwgIW9iamVjdC0+aXNGdW5jdGlvbih2bSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKworICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2sodm0sIG9iamVjdCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogb2Jq
ZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+aXNG
dW5jdGlvbih2bSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKKworICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c2V0UmVqZWN0aW9uSGFuZGxl
ZENhbGxiYWNrKHZtLCBvYmplY3QpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Cit9CisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0
IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVz
dHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8g
YmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rp
b24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAppbmRleCBkYmMyZWYwYjY2ZDQ5ZjBhM2QzZDNjYmZjY2IyM2ZmNDE1ZWVm
Zjk3Li4yYzUyZDViODhjMGJlZTY0Mzk5NGZjYTg1NTRkYmJlM2ZiYTQ2Mzk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyNyw2ICs0
MjcsOSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbV9uYW1lOwogCisgICAgU3Ryb25nPEpTT2Jq
ZWN0PiBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrOworICAgIFN0cm9uZzxKU09iamVjdD4g
bV9yZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2s7CisKICAgICBEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsK
IAogICAgIFZNJiBtX3ZtOwpAQCAtODA3LDYgKzgxMCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQogCisgICAgdm9pZCBzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFj
ayhWTSYgdm0sIEpTT2JqZWN0KiBmdW5jdGlvbikgeyBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9CisgICAgSlNPYmplY3QqIHVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV91bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjay5n
ZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soVk0mIHZtLCBK
U09iamVjdCogZnVuY3Rpb24pIHsgbV9yZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2suc2V0KHZtLCBm
dW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCkgY29u
c3QgeyByZXR1cm4gbV9yZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2suZ2V0KCk7IH0KKwogICAgIEpT
T2JqZWN0KiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1
ZmZlclN0cnVjdHVyZS5jb25zdHJ1Y3Rvcih0aGlzKTsgfQogCiAgICAgSlNPYmplY3QqIGFycmF5
QnVmZmVyUHJvdG90eXBlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUgc2hhcmluZ01vZGUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAKaW5kZXggMDgxMTRjYTY5NjA2YjBjMzI2MzljMTQxZWU4Zjg2ZmY0
MzVlYWEwNC4uNjk1ZDZkYTViYjk2MzI3MTRmZTg3MGU5NTA1MGE5YjhlY2M2MWY4OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcApAQCAtNzY2LDEwICs3NjYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSog
ZXgKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFnbG9iYWxPYmplY3QtPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKQorICAgIEpTUHJvbWlz
ZSogcHJvbWlzZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihleGVjLT5hcmd1bWVudCgwKSk7CisKKyAg
ICAvLyBJbnRlcm5hbFByb21pc2VzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlw
dHMuCisgICAgaWYgKHByb21pc2UtPmluaGVyaXRzPEpTSW50ZXJuYWxQcm9taXNlPih2bSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU1By
b21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwog
ICAgIEpTVmFsdWUgb3BlcmF0aW9uVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIEFT
U0VSVChvcGVyYXRpb25WYWx1ZS5pc051bWJlcigpKTsKQEAgLTc3Nyw3ICs3NzksMTggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25U
cmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBBU1NFUlQob3BlcmF0aW9uID09IEpTUHJvbWlzZVJl
amVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0IHx8IG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rp
b25PcGVyYXRpb246OkhhbmRsZSk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAot
ICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVj
dGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBleGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAg
IGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWpl
Y3Rpb25UcmFja2VyKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKGdsb2JhbE9iamVjdCwgZXhlYywgcHJvbWlz
ZSwgb3BlcmF0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdDoKKyAgICAg
ICAgICAgIHZtLnByb21pc2VSZWplY3RlZChwcm9taXNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6SGFuZGxlOgorICAgICAg
ICAgICAgdm0ucHJvbWlzZUhhbmRsZWQocHJvbWlzZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAppbmRleCAyNWVmOTQ1Y2JlNWE3NDQ1YzJjYTdjZTA2MjZjMmY5ODg0
YTdjMjEwLi4xMGJiYTNhYTJjMDIxY2I3NTc5Y2M3ZGIxMzdjZjI2YjdhYWQ5NjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zMTcsNiArMzE3LDcgQEAgVk06OlZNKFZN
VHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV90eXBlUHJvZmlsZXJFbmFi
bGVkQ291bnQoMCkKICAgICAsIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkK
ICAgICAsIG1fY29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRDb3VudCgwKQorICAgICwgbV9vdXRz
dGFuZGluZ1JlamVjdGVkUHJvbWlzZXMoKnRoaXMpCiB7CiAgICAgaWYgKFVOTElLRUxZKHZtQ3Jl
YXRpb25TaG91bGRDcmFzaCkpCiAgICAgICAgIENSQVNIX1dJVEhfSU5GTygweDQyNDI0MjQyMjAy
MDIwMjAsIDB4YmFkYmVlZjBiYWRiZWVmLCAweDEyMzQxMjM0MTIzNDEyMzQsIDB4MTMzNzEzMzcx
MzM3MTMzNyk7CkBAIC0xMDg5LDYgKzEwOTAsODQgQEAgdm9pZCBWTTo6cXVldWVNaWNyb3Rhc2so
SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPE1pY3JvdGFzaz4mJiB0YXNrKQogICAg
IG1fbWljcm90YXNrUXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UXVldWVkVGFzaz4oKnRo
aXMsICZnbG9iYWxPYmplY3QsIFdURk1vdmUodGFzaykpKTsKIH0KIAordm9pZCBWTTo6Y2FsbFBy
b21pc2VSZWplY3Rpb25DYWxsYmFjayhKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0
aW9uLCBKU1Byb21pc2UqIHByb21pc2UpCit7CisgICAgSlNPYmplY3QqIGNhbGxiYWNrID0gb3Bl
cmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0CisgICAgICAgID8g
cHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCkKKyAg
ICAgICAgOiBwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+cmVqZWN0aW9uSGFuZGxlZENhbGxiYWNr
KCk7CisKKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgqdGhpcyk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKCp0aGlzLCBjYWxsYmFjaywg
Y2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHByb21pc2UpOwor
ICAgIGFyZ3MuYXBwZW5kKHByb21pc2UtPnJlc3VsdCgqdGhpcykpOworICAgIGNhbGwocHJvbWlz
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxs
RGF0YSwganNOdWxsKCksIGFyZ3MpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cit9CisK
K3ZvaWQgVk06OnJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnNTb29uKCkKK3sKKyAgICBpZiAobV9h
Ym91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdGhpcyk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3Rl
ZFByb21pc2VzLmZpcnN0KCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTUHJvbWlzZURlZmVycmVk
KiBkZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlz
ZSgqdGhpcywgZGVmZXJyZWQsIHsgfSk7CisKKyAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c2No
ZWR1bGVXb3JrU29vbihkZWZlcnJlZCwgW3RoaXMsIGRlZmVycmVkLCB1bmhhbmRsZWRSZWplY3Rp
b25zID0gV1RGTW92ZShtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcyldICgpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBwcm9taXNlIDogdW5oYW5kbGVkUmVqZWN0aW9ucykgeworICAg
ICAgICAgICAgaWYgKHByb21pc2UtPmlzSGFuZGxlZCgqdGhpcykpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2soSlNQ
cm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpSZWplY3QsIHByb21pc2UuZ2V0KCkpOworCisgICAg
ICAgICAgICBpZiAoIXByb21pc2UtPmlzSGFuZGxlZCgqdGhpcykpCisgICAgICAgICAgICAgICAg
bV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMuc2V0KHByb21pc2UuZ2V0KCksIHByb21pc2Uu
Z2V0KCkpOworICAgICAgICB9CisgICAgICAgIGRlZmVycmVkLT5yZXNvbHZlKHVuaGFuZGxlZFJl
amVjdGlvbnMuZmlyc3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwganNVbmRlZmlu
ZWQoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgVk06OnByb21pc2VSZWplY3RlZChKU1Byb21pc2Uq
IHByb21pc2UpCit7CisgICAgbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuY29u
c3RydWN0QW5kQXBwZW5kKCp0aGlzLCBwcm9taXNlKTsKK30KKwordm9pZCBWTTo6cHJvbWlzZUhh
bmRsZWQoSlNQcm9taXNlKiBwcm9taXNlKQoreworICAgIGJvb2wgd2FzTm90UmVwb3J0ZWQgPSBt
X2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcy5yZW1vdmVGaXJzdE1hdGNoaW5nKFtw
cm9taXNlXSAoU3Ryb25nPEpTUHJvbWlzZT4mIHVuaGFuZGxlZFByb21pc2UpIHsKKyAgICAgICAg
cmV0dXJuIHVuaGFuZGxlZFByb21pc2UuZ2V0KCkgPT0gcHJvbWlzZTsKKyAgICB9KTsKKworICAg
IGlmICh3YXNOb3RSZXBvcnRlZCB8fCAhbV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMucmVt
b3ZlKHByb21pc2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdGhpcyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHByb21pc2UtPmdsb2JhbE9iamVjdCgpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJl
ZCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKKworICAgIC8vIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIC8v
IGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4oKnRoaXMsIHByb21pc2UpKTsKKyAg
ICAvLyBwcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UoKnRoaXMsIGRlZmVy
cmVkLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5h
ZGRQZW5kaW5nUHJvbWlzZSgqdGhpcywgZGVmZXJyZWQsIHsgfSk7CisKKyAgICBwcm9taXNlRGVm
ZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihkZWZlcnJlZCwgW3RoaXMsIGRlZmVycmVkLCBw
cm9taXNlXSAoKSB7CisgICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2soSlNQcm9t
aXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGUsIHByb21pc2UpOworICAgICAgICBkZWZlcnJl
ZC0+cmVzb2x2ZShwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBqc1VuZGVm
aW5lZCgpKTsKKyAgICB9KTsKK30KKwogdm9pZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkKIHsKICAg
ICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7CkBAIC0xMDk3LDYgKzExNzYs
NyBAQCB2b2lkIFZNOjpkcmFpbk1pY3JvdGFza3MoKQogICAgICAgICAgICAgbV9vbkVhY2hNaWNy
b3Rhc2tUaWNrKCp0aGlzKTsKICAgICB9CiAgICAgZmluYWxpemVTeW5jaHJvbm91c0pTRXhlY3V0
aW9uKCk7CisgICAgcmVwb3J0VW5oYW5kbGVkUmVqZWN0aW9uc1Nvb24oKTsKIH0KIAogdm9pZCBR
dWV1ZWRUYXNrOjpydW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggODI0NjJl
MWRmZmExNWM4NjhlYThhN2Q3ZjYyOTQ3MDFiMDhiMWI3YS4uYzQ0N2M0YWVlMTFiNTUwZTk5ZGI5
ZTRlODM5MDg5YTQyODQyYzRiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0x
MjMsNiArMTIzLDcgQEAgY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKIGNsYXNz
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiBjbGFzcyBKU09iamVjdDsKK2NsYXNzIEpTUHJvbWlzZTsKIGNsYXNzIEpTUnVuTG9vcFRpbWVy
OwogY2xhc3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlOwpAQCAtMTcyLDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBET01KSVQgewog
Y2xhc3MgU2lnbmF0dXJlOwogfQogCitlbnVtIGNsYXNzIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJh
dGlvbiA6IHVuc2lnbmVkOworCiBzdHJ1Y3QgRW50cnlGcmFtZTsKIHN0cnVjdCBIYXNoVGFibGU7
CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC05MTYsNiArOTE5LDkgQEAgcHVibGljOgogICAgIHZv
aWQgbm90aWZ5TmVlZFRlcm1pbmF0aW9uKCkgeyBtX3RyYXBzLmZpcmVUcmFwKFZNVHJhcHM6Ok5l
ZWRUZXJtaW5hdGlvbik7IH0KICAgICB2b2lkIG5vdGlmeU5lZWRXYXRjaGRvZ0NoZWNrKCkgeyBt
X3RyYXBzLmZpcmVUcmFwKFZNVHJhcHM6Ok5lZWRXYXRjaGRvZ0NoZWNrKTsgfQogCisgICAgdm9p
ZCBwcm9taXNlUmVqZWN0ZWQoSlNQcm9taXNlKik7CisgICAgdm9pZCBwcm9taXNlSGFuZGxlZChK
U1Byb21pc2UqKTsKKwogI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQog
ICAgIFN0YWNrVHJhY2UqIG5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RUaHJvdygpIGNvbnN0IHsgcmV0
dXJuIG1fbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93LmdldCgpOyB9CiAgICAgVGhyZWFkKiB0
aHJvd2luZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyb3dpbmdUaHJlYWQuZ2V0KCk7IH0K
QEAgLTEwMDEsNiArMTAwNyw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcHJpbWl0aXZl
R2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKICAgICB2b2lkIHByaW1pdGl2ZUdpZ2Fj
YWdlRGlzYWJsZWQoKTsKIAorICAgIHZvaWQgY2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhK
U1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24sIEpTUHJvbWlzZSopOworICAgIHZvaWQgcmVwb3J0
VW5oYW5kbGVkUmVqZWN0aW9uc1Nvb24oKTsKKwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQog
ICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKICNlbmRpZgpA
QCAtMTA1Niw2ICsxMDY1LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93
Q2hpY2tlbj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICBWZWN0
b3I8U3Ryb25nPEpTUHJvbWlzZT4+IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2Vz
OworICAgIFdlYWtHQ01hcDxKU1Byb21pc2UqLCBKU1Byb21pc2U+IG1fb3V0c3RhbmRpbmdSZWpl
Y3RlZFByb21pc2VzOworCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFZNJik+IG1fb25FYWNoTWlj
cm90YXNrVGljazsKICAgICB1aW50cHRyX3QgbV9jdXJyZW50V2Vha1JlZlZlcnNpb24geyAwIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cAppbmRleCA3ODhlMmU2NzdmN2YyMGNkMzlkMjE3MTJjZjg2NzQ2MGI1NmY1YjRiLi44MDMwZDM1
NDBmNWIxNDY0OTRjNTA2YmJiY2ZiOGUyNDMyYWYxN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC0yMTYsMTYgKzIxNiwxMSBA
QCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2Jh
bE9iamVjdCoganNHbG9iYWxPYmplY3QsCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hh
dHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlv
bnRyYWNrZXItaW1wbGVtZW50YXRpb24KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oanNH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8qIGNvbnRleHQgPSBnbG9iYWxPYmplY3Quc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gSW50ZXJuYWxQcm9taXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3Jp
cHRzLgotICAgIGlmIChKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0ludGVybmFsUHJvbWlzZSo+
KHZtLCBwcm9taXNlKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IElmIHNjcmlw
dCBoYXMgbXV0ZWQgZXJyb3JzIChjcm9zcyBvcmlnaW4pLCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMu
CiAgICAgLy8gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3MTQxNT4gSW1wbGVtZW50IHRoZSBgbXV0
ZWQtZXJyb3JzYCBwcm9wZXJ0eSBvZiBTY3JpcHRzIHRvIGF2b2lkIG9uZXJyb3Ivb251bmhhbmRs
ZWRyZWplY3Rpb24gZm9yIGNyb3NzLW9yaWdpbiBzY3JpcHRzCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374102</attachid>
            <date>2019-07-14 18:52:59 -0700</date>
            <delta_ts>2019-07-30 17:20:21 -0700</delta_ts>
            <desc>Minimal PromiseDeferredTimer usage example</desc>
            <filename>minimal-pdt-example.diff</filename>
            <type>text/plain</type>
            <size>2486</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZDRmYTIyMmM3MjEuLjcxZTk1MTBjNWYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcApAQCAtMjcxNyw2ICsyNzE3LDkgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJh
Y3RpdmUoR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZSwgc291
cmNlT3JpZ2luLCBzb3VyY2VPcmlnaW4uc3RyaW5nKCkpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cih2bSk7CisKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgICAgICBw
cmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkudG9X
VEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBlbHNlCkBAIC0yNzI0LDYgKzI3MjcsOCBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2
ZShHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIAogICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICB2bS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorICAgICAg
ICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+cnVuUnVuTG9vcCgpOwogICAgIH0KICAgICBwcmlu
dGYoIlxuIik7CiB9CkBAIC0yOTc2LDExICsyOTgxLDkgQEAgaW50IHJ1bkpTQyhjb25zdCBDb21t
YW5kTGluZSYgb3B0aW9ucywgYm9vbCBpc1dvcmtlciwgY29uc3QgRnVuYyYgZnVuYykKICAgICAg
ICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CiAgICAgfQogICAgIHZtLnByb21pc2VEZWZlcnJlZFRp
bWVyLT5ydW5SdW5Mb29wKCk7Ci0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZt
KTsKLSAgICAgICAgaWYgKG9wdGlvbnMubV9pbnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQotICAgICAg
ICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKLSAgICB9CisKKyAgICBpZiAob3B0
aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCisgICAgICAgIHJ1bkludGVyYWN0aXZlKGds
b2JhbE9iamVjdCk7CiAKICAgICByZXN1bHQgPSBzdWNjZXNzICYmIChhc3luY1Rlc3RFeHBlY3Rl
ZFBhc3NlcyA9PSBhc3luY1Rlc3RQYXNzZXMpID8gMCA6IDM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApp
bmRleCAwODExNGNhNjk2MC4uMmIyMTdmNDMyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTc2
Niw2ICs3NjYsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9z
dFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCisgICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxs
Pj4gZGVwZW5kZW5jaWVzOworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4o
dm0sIGdsb2JhbE9iamVjdCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5k
aW5nUHJvbWlzZSh2bSwgZGVmZXJyZWQsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisgICAgdm0u
cHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24oZGVmZXJyZWQsIFtkZWZlcnJl
ZCwgZ2xvYmFsT2JqZWN0XSAoKSB7CisgICAgICAgIHByaW50Zigid2UgZGlkIGl0IVxuIik7Cisg
ICAgICAgIGRlZmVycmVkLT5yZXNvbHZlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICB9KTsKKwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcikKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375197</attachid>
            <date>2019-07-30 17:20:23 -0700</date>
            <delta_ts>2019-08-09 15:05:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197172-20190730172019.patch</filename>
            <type>text/plain</type>
            <size>30687</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NWZkMzE4MWI4MjcxZWNjNjYxMjczZmNmYWEyNzdkYzU2MGI2NmMzLi4xZDkzMzg3MTc5MWE4ZWY2
YWUxOWNiNDQ0YzgwYmU5NmI1YmQ3MWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OCBAQAorMjAxOS0wNy0zMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIGNhbGxiYWNrcyBmb3IgdW5oYW5kbGVkIGFu
ZCBsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIHRvIGJlIHNldCB2aWEgSlNDJ3MgcHVi
bGljIEMgQVBJLgorICAgICAgICBTaW5jZSB0aGVyZSBpcyBubyB0YXNrIHF1ZXVlIGluIHN1Y2gg
YW4gZW52aXJvbm1lbnQsIHRoZXNlIGNhbGxiYWNrcyBmaXJlIG9mZiBvZiB0aGUgcnVuIGxvb3Au
CisgICAgICAgIENhbGxiYWNrcyByZWNlaXZlIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVh
c29uIGFzIGFyZ3VtZW50cyBhbmQgdGhlaXIgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCisKKyAg
ICAgICAgQSBmdXJ0aGVyIEFQSSBpcyBwcm92aWRlZCB0byBlbnN1cmUgdGhhdCBob3N0IGVudmly
b25tZW50cyBjYW4gaXRlcmF0ZSB0aGUgcnVuIGxvb3AgYW5kIGhhbmRsZSBwZW5kaW5nIHRhc2tz
LgorCisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAgICAgIChKU1J1bkxvb3BJdGVyYXRl
KTogQWRkZWQuCisgICAgICAgICogQVBJL0pTQmFzZS5oOgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9u
Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFNldFJlamVjdGlvbkhh
bmRsZWRDYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuaDoKKyAg
ICAgICAgQWRkIG5ldyBwdWJsaWMgQVBJIGNhbGxzLgorCisgICAgICAgICogQVBJL3Rlc3RzL3Rl
c3RhcGkuY3BwOgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlzZVJlc29sdmVUcnVlKTogQ2xlYW4g
dXAgdGVzdCBvdXRwdXQuCisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSk6IENs
ZWFuIHVwIHRlc3Qgb3V0cHV0LgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlzZVJlamVjdGlvbkNh
bGxiYWNrcyk6IEFkZGVkLgorICAgICAgICAodGVzdENBUElWaWFDcHApOgorICAgICAgICBBZGQg
bmV3IEMrKyBBUEkgdGVzdC4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVq
ZWN0aW9uQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKGZ1bmN0aW9uU2V0UmVqZWN0aW9uSGFu
ZGxlZENhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChydW5JbnRlcmFjdGl2ZSk6CisgICAgICAg
IChydW5KU0MpOgorICAgICAgICBBZGQgY29ycmVzcG9uZGluZyBnbG9iYWxzIHRvIEpTQyBzaGVs
bCBhbmQgaXRlcmF0ZSB0aGUgcnVuIGxvb3AgYWZ0ZXIgZWFjaCBsaW5lIGV4ZWN1dGVkLgorCisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrIGNvbnN0KTog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzZXRSZWplY3Rpb25IYW5kbGVk
Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlamVjdGlv
bkhhbmRsZWRDYWxsYmFjayBjb25zdCk6IEFkZGVkLgorICAgICAgICBLZWVwIHN0cm9uZyByZWZl
cmVuY2VzIHRvIHRoZSBjYWxsYmFja3MuCisKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0hvc3RQcm9taXNlUmVq
ZWN0aW9uVHJhY2tlcik6CisgICAgICAgIEFkZCBkZWZhdWx0IGJlaGF2aW9yLgorCisgICAgICAg
ICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6
OlZNOjpjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6
OlZNOjpyZXBvcnRVbmhhbmRsZWRSZWplY3Rpb25zU29vbik6IEFkZGVkLgorICAgICAgICAoSlND
OjpWTTo6cHJvbWlzZVJlamVjdGVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlZNOjpwcm9taXNl
SGFuZGxlZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTTo6ZHJhaW5NaWNyb3Rhc2tzKToKKyAg
ICAgICAgTWltaWMgUmVqZWN0ZWRQcm9taXNlVHJhY2tlciB1c2luZyB0aGUgcnVuIGxvb3AgKHZp
YSBQcm9taXNlRGVmZXJyZWRUaW1lcikuCisgICAgICAgIFNwZWNpZmljYWxseToKKyAgICAgICAg
ICAxLiBXaGVuIGEgcHJvbWlzZSByZWplY3Rpb24gZ29lcyB1bmhhbmRsZWQsIHN0b3JlIHRoZSBw
cm9taXNlIGZvciBsYXRlciByZXBvcnRpbmcuCisgICAgICAgICAgMi4gQWZ0ZXIgZHJhaW5pbmcg
bWljcm90YXNrcywgc2NoZWR1bGUgcmVwb3J0aW5nIG9mIGFueSBzdG9yZWQgdW5oYW5kbGVkIHJl
amVjdGlvbnMuCisgICAgICAgICAgMy4gSWYgYW4gYWxyZWFkeS1yZXBvcnRlZCAoYW5kIG5vdC15
ZXQtR0NlZCkgcmVqZWN0aW9uIGdldHMgaGFuZGxlZCBhdCBhIGxhdGVyIHRpbWUsCisgICAgICAg
ICAgICAgaW1tZWRpYXRlbHkgc2NoZWR1bGUgaXQgdG8gYmUgcmVwb3J0ZWQuCisKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisgICAgICAgIFN0b3JlIHVuaGFuZGxlZCByZWplY3Rpb25zICh0aGVz
ZSBjb2xsZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSBlbXB0eSBpbiB0aGUgcHJlc2VuY2Ugb2YgV2Vi
Q29yZSkuCisKIDIwMTktMDctMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBJbmNyZW1lbnQgYnl0ZWNvZGUgYWdlIG9ubHkgd2hlbiBTbG90Vmlz
aXRvciBpcyBmaXJzdC12aXNpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAzNmRkNGIzYTFhZDYyOWQyZTQxOGVhZDM5YmNjNzg5
MjEwMjYyMjg4Li40ZWFlMDVhZTY2NTZlMTYyNDRkZTYzMTFiM2MzMjc1MWFhYTA4ZGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDE5LTA3LTMwICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGlu
Z0Bzb255LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgcHVibGljIEFQSSBmb3IgdW5o
YW5kbGVkIHByb21pc2UgcmVqZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3dGYvUnVuTG9vcC5oOgorICAgICAgICAqIHd0Zi9nbGliL1J1
bkxvb3BHTGliLmNwcDoKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6aXRlcmF0ZSk6IEFkZGVkLgor
ICAgICAgICBFbnN1cmUgdGhhdCBHTGliJ3MgUnVuTG9vcCBoYXMgYSB3YXkgdG8gcnVuIGZvciBh
IHNpbmdsZSBpdGVyYXRpb24uCisgICAgICAgIChJbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBVdGls
aWVzR0xpYiBpbiBUZXN0V2ViS2l0QVBJLikKKwogMjAxOS0wNy0zMCAgTWljaGFlbCBDYXRhbnph
cm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IENSQVNIX1dJVEhfSU5G
TygpIHNvIHRoYXQgaXQgZG9lc24ndCBjb21wbGFpbiBhYm91dCB1bnVzZWQgcGFyYW1ldGVycyBv
biBub24gQ2xhbmcgLyBNU1ZDIGNvbXBpbGVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MjgzYjU3ZDhmOTFh
ZGZiZWRiOTUwOTM1NTAzY2I0NmE4NDgyMzVjLi5hYWYxYjcxMzNiZTNkZWQwOTY0NTZhMzhlNDgx
ZDQwMTIxOTAzZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDctMzAgIFJv
c3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIEpTQyBzaG91
bGQgaGF2ZSBwdWJsaWMgQVBJIGZvciB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxNzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2Jq
ZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAgICAgIE1vdmUgSlNJbnRlcm5hbFBy
b21pc2UgZWFybHktb3V0IHRvIEpTQyBzaWRlLgorCiAyMDE5LTA3LTMwICBNaWNoYWVsIENhdGFu
emFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXgg
R1RLIGJ1aWxkIGFmdGVyIFNvdXBOZXR3b3JrU2Vzc2lvbiBvd25lcnNoaXAgcmV3b3JrLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCmluZGV4IDQ0ZWQ0OTgwOTM5ZDA5ZGE0OGIxODY4
MWI4NWM3ZmIwNDA3ZjE3MTYuLjIzZDM0ZmVkMDQzZTgzMzA5YzMyNTIzYTFhOWU4N2IxOTNmYTBk
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKQEAgLTE0Nyw2ICsxNDcsMTUg
QEAgdm9pZCBKU0dhcmJhZ2VDb2xsZWN0KEpTQ29udGV4dFJlZiBjdHgpCiAgICAgdm0uaGVhcC5y
ZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwogfQogCit2b2lkIEpTUnVuTG9vcEl0ZXJhdGUo
KQoreworI2lmIFVTRShDRikKKyAgICBDRlJ1bkxvb3BSdW5Jbk1vZGUoa0NGUnVuTG9vcERlZmF1
bHRNb2RlLCAwLjAsIHRydWUpOworI2Vsc2UKKyAgICBSdW5Mb29wOjppdGVyYXRlKCk7CisjZW5k
aWYKK30KKwogdm9pZCBKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdChKU0NvbnRleHRSZWYgY3R4LCBz
aXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIWN0eCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0Jhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNl
LmgKaW5kZXggMDFjMWIyODZlYmQ2YzcwYmJmMmQ2MDRkMDBhZjVkNjA4ZjFkYzM2My4uODMyM2Yx
NmJkMDVmNmVhMmVhMGQ0NTUzOTBhZTg1YWU1YzFiMGY0MiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZS5oCkBAIC0xMzksNiArMTM5LDEyIEBAIEpTX0VYUE9SVCBib29sIEpTQ2hlY2tTY3Jp
cHRTeW50YXgoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1N0cmluCiAq
LwogSlNfRVhQT1JUIHZvaWQgSlNHYXJiYWdlQ29sbGVjdChKU0NvbnRleHRSZWYgY3R4KTsKIAor
LyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCBSdW5zIGEgc2luZ2xlIGl0ZXJhdGlvbiBvZiB0aGUg
Y3VycmVudCBydW4gbG9vcCB0byBoYW5kbGUgYW55IHBlbmRpbmcgdGFza3MgKGUuZy4sIHByb21p
c2UgcmVqZWN0aW9uIGV2ZW50cykuCisqLworSlNfRVhQT1JUIHZvaWQgSlNSdW5Mb29wSXRlcmF0
ZSh2b2lkKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAppbmRleCA5ZjVmZGFmYzc4MTk2ZmU0NDhjMThk
MDc5MTVlMDRmYTM4Njg0YWFhLi44NzNlZWJhY2RmODJiMGMyMTZhZjBjMWY3YWEyMDFkNzBmOGVl
MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmSW50ZXJuYWwuaCIKIAogI2luY2x1
ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJBUElVdGlscy5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJKU0FQSUds
b2JhbE9iamVjdC5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgor
I2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CkBAIC0yNDksNiArMjUxLDQ1IEBAIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0TmFtZShK
U0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBuYW1lKQogICAgIHZtLnZtRW50cnlH
bG9iYWxPYmplY3QoZXhlYyktPnNldE5hbWUobmFtZSA/IG5hbWUtPnN0cmluZygpIDogU3RyaW5n
KCkpOwogfQogCit2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTKGZ1bmN0aW9uKTsKKyAg
ICBpZiAoIW9iamVjdC0+aXNGdW5jdGlvbih2bSkpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxs
YmFjayh2bSwgb2JqZWN0KTsKK30KKwordm9pZCBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25I
YW5kbGVkQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWN0eCkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMoZnVu
Y3Rpb24pOworICAgIGlmICghb2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkgeworICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldFJlamVjdGlvbkhh
bmRsZWRDYWxsYmFjayh2bSwgb2JqZWN0KTsKK30KIAogY2xhc3MgQmFja3RyYWNlRnVuY3RvciB7
CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaAppbmRleCAx
Y2U3NDM1ODA0ZWJiOWJjNDdmN2MxZjBkOWU5NGZjMDc4OTg4YzBiLi45ZmNkM2E5YzBmN2JmM2Vi
YTE0OTgxNTBkNWNmY2ExODhhZmUwNTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmgKQEAgLTE1Niw2ICsxNTYsMjYgQEAgSlNfRVhQT1JUIEpTU3RyaW5nUmVmIEpT
R2xvYmFsQ29udGV4dENvcHlOYW1lKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpIEpTQ19BUElfQVYK
ICovCiBKU19FWFBPUlQgdm9pZCBKU0dsb2JhbENvbnRleHRTZXROYW1lKEpTR2xvYmFsQ29udGV4
dFJlZiBjdHgsIEpTU3RyaW5nUmVmIG5hbWUpIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEw
KSwgaW9zKDguMCkpOwogCisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlICJ1bmhh
bmRsZWQgcHJvbWlzZSByZWplY3Rpb24iIGNhbGxiYWNrIGZvciBhIGNvbnRleHQuCitAZGlzY3Vz
c2lvbiBKU0Mtb25seSBhbHRlcm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5o
YW5kbGVkcmVqZWN0aW9uJykuIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIEpTUnVu
TG9vcEl0ZXJhdGUuCitAcGFyYW0gY3R4IFRoZSBKU0dsb2JhbENvbnRleHQgdG8gc2V0IHRoZSBj
YWxsYmFjayBvbi4KK0BwYXJhbSBmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0
LCB3aGljaCByZWNlaXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNvbiBhcyBhcmd1
bWVudHMuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBhIEpTVmFsdWVSZWYgaW4gd2hp
Y2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3MgTlVMTCBpZiB5b3UgZG8gbm90
IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTR2xvYmFs
Q29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisvKiEK
K0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlICJsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWpl
Y3Rpb24iIGNhbGxiYWNrIGZvciBhIGNvbnRleHQuCitAZGlzY3Vzc2lvbiBKU0Mtb25seSBhbHRl
cm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVqZWN0aW9uaGFuZGxlZCcpLiBN
dXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBKU1J1bkxvb3BJdGVyYXRlLgorQHBhcmFt
IGN0eCBUaGUgSlNHbG9iYWxDb250ZXh0IHRvIHNldCB0aGUgY2FsbGJhY2sgb24uCitAcGFyYW0g
ZnVuY3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCwgd2hpY2ggcmVjZWl2ZXMgdGhl
IHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMgYXJndW1lbnRzLgorQHBhcmFtIGV4Y2Vw
dGlvbiBBIHBvaW50ZXIgdG8gYSBKU1ZhbHVlUmVmIGluIHdoaWNoIHRvIHN0b3JlIGFuIGV4Y2Vw
dGlvbiwgaWYgYW55LiBQYXNzIE5VTEwgaWYgeW91IGRvIG5vdCBjYXJlIHRvIHN0b3JlIGFuIGV4
Y2VwdGlvbi4KKyovCitKU19FWFBPUlQgdm9pZCBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25I
YW5kbGVkQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcAppbmRleCAx
Y2ZkNGMwM2EwOGJhZDQyMmU5NDE0MTg4NWJjOTdjMGU4ZDBlYjY2Li5jMGFmZWFhMjQyNmNiYzIz
ZDQ3ZjI4MTA1MDg4MTY3YjgxNDIzMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5jcHAKQEAgLTEzNyw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
eW1ib2xzRGVsZXRlUHJvcGVydHlGb3JLZXkoKTsKICAgICB2b2lkIHByb21pc2VSZXNvbHZlVHJ1
ZSgpOwogICAgIHZvaWQgcHJvbWlzZVJlamVjdFRydWUoKTsKKyAgICB2b2lkIHByb21pc2VSZWpl
Y3Rpb25DYWxsYmFja3MoKTsKIAogICAgIGludCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2Zh
aWxlZDsgfQogCkBAIC00NTQsNyArNDU1LDcgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVzb2x2
ZVRydWUoKQogCiAgICAgYXV0byB0cnVlVmFsdWUgPSBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4
dCwgdHJ1ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZXNvbHZlLCBy
ZXNvbHZlLCAxLCAmdHJ1ZVZhbHVlLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhjZXB0aW9u
LCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gcmVzb2x2ZSBwcm9taXNlIik7CisgICAg
Y2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmlu
ZyBwcm9taXNlIik7CiAgICAgY2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgInRoZW4gcmVzcG9uc2Ug
ZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7CiB9CiAKQEAgLTQ3OSw3ICs0ODAs
NyBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZWplY3RUcnVlKCkKIAogICAgIEFQSVN0cmluZyBj
YXRjaFN0cmluZygiY2F0Y2giKTsKICAgICBKU1ZhbHVlUmVmIGNhdGNoRnVuY3Rpb24gPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIHByb21pc2UsIGNhdGNoU3RyaW5nLCAmZXhjZXB0aW9u
KTsKLSAgICBjaGVjayghZXhjZXB0aW9uICYmIGNhdGNoRnVuY3Rpb24gJiYgSlNWYWx1ZUlzT2Jq
ZWN0KGNvbnRleHQsIGNhdGNoRnVuY3Rpb24pLCAiUHJvbWlzZSBzaG91bGQgaGF2ZSBhIHRoZW4g
b2JqZWN0IHByb3BlcnR5Iik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYXRjaEZ1bmN0aW9u
ICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYXRjaEZ1bmN0aW9uKSwgIlByb21pc2Ugc2hv
dWxkIGhhdmUgYSBjYXRjaCBvYmplY3QgcHJvcGVydHkiKTsKIAogICAgIEpTVmFsdWVSZWYgcGFz
c2VkVHJ1ZUZ1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4
dCwgdHJ1ZVN0cmluZywgcGFzc2VkVHJ1ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihj
b250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihjYXRjaEZ1bmN0aW9uKSwgcHJvbWlzZSwg
MSwgJnBhc3NlZFRydWVGdW5jdGlvbiwgJmV4Y2VwdGlvbik7CkBAIC00ODcsOCArNDg4LDUxIEBA
IHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlamVjdFRydWUoKQogCiAgICAgYXV0byB0cnVlVmFsdWUg
PSBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdHJ1ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCByZWplY3QsIHJlamVjdCwgMSwgJnRydWVWYWx1ZSwgJmV4Y2VwdGlv
bik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3du
IHJlc29sdmUgcHJvbWlzZSIpOwotICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQsICJ0aGVuIHJl
c3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOworICAgIGNoZWNrKCFl
eGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biByZWplY3RpbmcgcHJvbWlz
ZSIpOworICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQsICJjYXRjaCByZXNwb25zZSBmdW5jdGlv
biBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKK30KKwordm9pZCBUZXN0QVBJOjpwcm9taXNl
UmVqZWN0aW9uQ2FsbGJhY2tzKCkKK3sKKyAgICBKU09iamVjdFJlZiByZWplY3Q7CisgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIHN0YXRpYyBhdXRvIHByb21pc2UgPSBK
U09iamVjdE1ha2VEZWZlcnJlZFByb21pc2UoY29udGV4dCwgbnVsbHB0ciwgJnJlamVjdCwgJmV4
Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgImNyZWF0aW5nIGEgKHJlamVjdC1vbmx5
KSBkZWZlcnJlZCBwcm9taXNlIHNob3VsZCBub3QgdGhyb3ciKTsKKyAgICBzdGF0aWMgYXV0byBy
ZWFzb24gPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBBUElTdHJpbmcoInJlYXNvbiIpKTsK
KworICAgIHN0YXRpYyBUZXN0QVBJKiB0ZXN0ZXIgPSB0aGlzOworICAgIHN0YXRpYyBhdXRvIGNh
bGxiYWNrQ2FsbENvdW50ID0gMDsKKworICAgIGF1dG8gY2FsbGJhY2sgPSBbXShKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKikgLT4gSlNWYWx1ZVJlZiB7
CisgICAgICAgIHRlc3Rlci0+Y2hlY2soYXJndW1lbnRDb3VudCAmJiBKU1ZhbHVlSXNTdHJpY3RF
cXVhbChjdHgsIGFyZ3VtZW50c1swXSwgcHJvbWlzZSksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2
ZSByZWplY3RlZCBwcm9taXNlIGFzIGZpcnN0IGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+
Y2hlY2soYXJndW1lbnRDb3VudCA+IDEgJiYgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY3R4LCBhcmd1
bWVudHNbMV0sIHJlYXNvbiksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2ZSByZWplY3Rpb24gcmVh
c29uIGFzIHNlY29uZCBhcmd1bWVudCIpOworICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50
Q291bnQgPT0gMiwgImNhbGxiYWNrIHNob3VsZCBub3QgcmVjZWl2ZSBhIHRoaXJkIGFyZ3VtZW50
Iik7CisgICAgICAgIGNhbGxiYWNrQ2FsbENvdW50Kys7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworICAgIH07CisgICAgYXV0byBjYWxsYmFja0Z1bmN0aW9uID0g
SlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgQVBJU3RyaW5nKCJjYWxs
YmFjayIpLCBjYWxsYmFjayk7CisKKyAgICBKU0dsb2JhbENvbnRleHRTZXRVbmhhbmRsZWRSZWpl
Y3Rpb25DYWxsYmFjayhjb250ZXh0LCBjYWxsYmFja0Z1bmN0aW9uLCAmZXhjZXB0aW9uKTsKKyAg
ICBjaGVjayghZXhjZXB0aW9uLCAic2V0dGluZyB1bmhhbmRsZWQgcmVqZWN0aW9uIGNhbGxiYWNr
IHNob3VsZCBub3QgdGhyb3ciKTsKKworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4
dCwgcmVqZWN0LCByZWplY3QsIDEsICZyZWFzb24sICZleGNlcHRpb24pOworICAgIHNsZWVwKDEw
MF9tcyk7CisgICAgSlNSdW5Mb29wSXRlcmF0ZSgpOworICAgIGNoZWNrKCFleGNlcHRpb24gJiYg
Y2FsbGJhY2tDYWxsQ291bnQgPT0gMSwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hv
dWxkIGJlIGNhbGxlZCB1cG9uIHVuaGFuZGxlZCByZWplY3Rpb24iKTsKKworICAgIGF1dG8gbm9v
cEZ1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVuY3Rpb24oY29udGV4dCwgQVBJU3RyaW5nKCJub29w
IiksIDAsIG51bGxwdHIsIEFQSVN0cmluZygiIiksIG51bGxwdHIsIDEsICZleGNlcHRpb24pOwor
ICAgIGNoZWNrKCFleGNlcHRpb24sICJjcmVhdGluZyBhIG5vLW9wIGZ1bmN0aW9uIHNob3VsZCBu
b3QgdGhyb3ciKTsKKworICAgIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrKGNvbnRleHQsIG5vb3BGdW5jdGlvbiwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4
Y2VwdGlvbiwgInJlc2V0dGluZyB1bmhhbmRsZWQgcmVqZWN0aW9uIGNhbGxiYWNrIHNob3VsZCBu
b3QgdGhyb3ciKTsKKyAgICBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJh
Y2soY29udGV4dCwgY2FsbGJhY2tGdW5jdGlvbiwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4
Y2VwdGlvbiwgInNldHRpbmcgcmVqZWN0aW9uIGhhbmRsZWQgY2FsbGJhY2sgc2hvdWxkIG5vdCB0
aHJvdyIpOworCisgICAgYXV0byBjYXRjaEZ1bmN0aW9uID0gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBwcm9taXNlLCBBUElTdHJpbmcoImNhdGNoIiksICZleGNlcHRpb24pOworICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oY2F0
Y2hGdW5jdGlvbiksIHByb21pc2UsIDEsICZub29wRnVuY3Rpb24sICZleGNlcHRpb24pOworICAg
IHNsZWVwKDEwMF9tcyk7CisgICAgSlNSdW5Mb29wSXRlcmF0ZSgpOworICAgIGNoZWNrKCFleGNl
cHRpb24gJiYgY2FsbGJhY2tDYWxsQ291bnQgPT0gMiwgInJlamVjdGlvbiBoYW5kbGVkIGNhbGxi
YWNrIHNob3VsZCBiZSBjYWxsZWQgdXBvbiBsYXRlLWhhbmRsZWQgcmVqZWN0aW9uIik7CiB9CiAK
ICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CkBAIC01MjEsNiArNTY1LDcgQEAgaW50IHRlc3RDQVBJVmlhQ3BwKGNvbnN0IGNoYXIqIGZpbHRl
cikKICAgICBSVU4oc3ltYm9sc0RlbGV0ZVByb3BlcnR5Rm9yS2V5KCkpOwogICAgIFJVTihwcm9t
aXNlUmVzb2x2ZVRydWUoKSk7CiAgICAgUlVOKHByb21pc2VSZWplY3RUcnVlKCkpOworICAgIFJV
Tihwcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2tzKCkpOwogCiAgICAgaWYgKHRhc2tzLmlzRW1wdHko
KSkgewogICAgICAgICBkYXRhTG9nTG4oIkZpbHRlcmVkIGFsbCB0ZXN0czogRVJST1IiKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggZWFkMDFlMjBiN2FmOTVlNzM2MjIzYzE1NTRhMjBmMzMzNmFk
ZjY2Zi4uZmZhYTQ4MGE2NDQyNTdjMDBkNGU5NWJlYzkxMWU4MjUwZTMzMDZiYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTM3OCw2ICszNzgsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkRpc2FibGVSaWNoU291cmNlSW5mbyhFeGVjU3RhdGUqKTsKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFsbG9jSW5BTG9vcChF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VG90YWxDb21waWxlVGltZShFeGVjU3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmVq
ZWN0aW9uSGFuZGxlZENhbGxiYWNrKEV4ZWNTdGF0ZSopOworCiBzdHJ1Y3QgU2NyaXB0IHsKICAg
ICBlbnVtIGNsYXNzIFN0cmljdE1vZGUgewogICAgICAgICBTdHJpY3QsCkBAIC02MzIsNiArNjM1
LDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImRpc2FibGVSaWNoU291
cmNlSW5mbyIsIGZ1bmN0aW9uRGlzYWJsZVJpY2hTb3VyY2VJbmZvLCAwKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJtYWxsb2NJbkFMb29wIiwgZnVuY3Rpb25NYWxsb2NJbkFMb29wLCAwKTsK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJ0b3RhbENvbXBpbGVUaW1lIiwgZnVuY3Rpb25Ub3Rh
bENvbXBpbGVUaW1lLCAwKTsKKworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldFVuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrIiwgZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFj
aywgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0UmVqZWN0aW9uSGFuZGxlZENhbGxi
YWNrIiwgZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2ssIDEpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykK
QEAgLTIzNzgsNiArMjM4NCwzMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbldlYkFzc2VtYmx5TWVtb3J5TW9kZShFeGVjU3RhdGUqIGV4ZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFy
Z3VtZW50KDApLmdldE9iamVjdCgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPmlzRnVuY3Rpb24odm0pKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisKKyAgICBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKHZt
LCBvYmplY3QpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5k
bGVkQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghb2Jq
ZWN0IHx8ICFvYmplY3QtPmlzRnVuY3Rpb24odm0pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CisKKyAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayh2bSwgb2JqZWN0KTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiAvLyBVc2UgU0VIIGZvciBSZWxlYXNl
IGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFsb2cKIC8vIChs
dWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNv
IGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNl
IHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApAQCAtMjcxMiwxMyArMjc0NCwx
OCBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAg
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShsaW5lLCBzb3VyY2VPcmlnaW4sIHNvdXJjZU9yaWdpbi5zdHJpbmco
KSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5kaWYKLSAgICAgICAgaWYg
KGV2YWx1YXRpb25FeGNlcHRpb24pCi0gICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNc
biIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIodm0pOwogCi0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOworICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pCisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFs
dWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQor
ICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+cnVuUnVuTG9vcCgpOwogICAgIH0KICAg
ICBwcmludGYoIlxuIik7CiB9CkBAIC0yOTcxLDExICszMDA4LDkgQEAgaW50IHJ1bkpTQyhjb25z
dCBDb21tYW5kTGluZSYgb3B0aW9ucywgYm9vbCBpc1dvcmtlciwgY29uc3QgRnVuYyYgZnVuYykK
ICAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CiAgICAgfQogICAgIHZtLnByb21pc2VEZWZl
cnJlZFRpbWVyLT5ydW5SdW5Mb29wKCk7Ci0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKLSAgICAgICAgaWYgKG9wdGlvbnMubV9pbnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQot
ICAgICAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKLSAgICB9CisgICAgCisg
ICAgaWYgKG9wdGlvbnMubV9pbnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQorICAgICAgICBydW5JbnRl
cmFjdGl2ZShnbG9iYWxPYmplY3QpOwogCiAgICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAoYXN5bmNU
ZXN0RXhwZWN0ZWRQYXNzZXMgPT0gYXN5bmNUZXN0UGFzc2VzKSA/IDAgOiAzOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCAwNDdjMTY2
NTNlNzFiMWE4MDZiZDlmYzdkNTY2NDNhNWY5ODhmMTFlLi4zMDdjYzQ1ZGExM2EyMDFkMzRmNTZk
M2M4MWJhY2VhMTk2ODA4MjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyNSw2ICs0MjUsOSBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbV9uYW1lOwogCisgICAgU3Ryb25nPEpTT2JqZWN0PiBtX3VuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrOworICAgIFN0cm9uZzxKU09iamVjdD4gbV9yZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2s7
CisKICAgICBEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKIAogICAgIFZNJiBtX3ZtOwpAQCAtODA0LDYg
KzgwNywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCisgICAgdm9p
ZCBzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhWTSYgdm0sIEpTT2JqZWN0KiBmdW5jdGlv
bikgeyBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9Cisg
ICAgSlNPYmplY3QqIHVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV91bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjay5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZWpl
Y3Rpb25IYW5kbGVkQ2FsbGJhY2soVk0mIHZtLCBKU09iamVjdCogZnVuY3Rpb24pIHsgbV9yZWpl
Y3Rpb25IYW5kbGVkQ2FsbGJhY2suc2V0KHZtLCBmdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCog
cmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9yZWplY3Rpb25IYW5k
bGVkQ2FsbGJhY2suZ2V0KCk7IH0KKwogICAgIEpTT2JqZWN0KiBhcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5jb25zdHJ1Y3Rvcih0
aGlzKTsgfQogCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVyUHJvdG90eXBlKEFycmF5QnVmZmVy
U2hhcmluZ01vZGUgc2hhcmluZ01vZGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKaW5kZXggMDgx
MTRjYTY5NjA2YjBjMzI2MzljMTQxZWU4Zjg2ZmY0MzVlYWEwNC4uNjk1ZDZkYTViYjk2MzI3MTRm
ZTg3MGU5NTA1MGE5YjhlY2M2MWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApAQCAtNzY2LDEwICs3
NjYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9zdFByb21p
c2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgaWYgKCFnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VS
ZWplY3Rpb25UcmFja2VyKQorICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzQ2FzdDxKU1Byb21p
c2UqPihleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICAvLyBJbnRlcm5hbFByb21pc2VzIHNob3Vs
ZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCisgICAgaWYgKHByb21pc2UtPmluaGVy
aXRzPEpTSW50ZXJuYWxQcm9taXNlPih2bSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQ
cm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIEpTVmFsdWUgb3BlcmF0aW9uVmFsdWUg
PSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIEFTU0VSVChvcGVyYXRpb25WYWx1ZS5pc051bWJl
cigpKTsKQEAgLTc3Nyw3ICs3NzksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBB
U1NFUlQob3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0IHx8
IG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZSk7CiAgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBl
eGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKQorICAgICAgICBnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFj
a2VyKGdsb2JhbE9iamVjdCwgZXhlYywgcHJvbWlzZSwgb3BlcmF0aW9uKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAgY2FzZSBKU1Byb21pc2VSZWpl
Y3Rpb25PcGVyYXRpb246OlJlamVjdDoKKyAgICAgICAgICAgIHZtLnByb21pc2VSZWplY3RlZChw
cm9taXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTUHJvbWlzZVJlamVj
dGlvbk9wZXJhdGlvbjo6SGFuZGxlOgorICAgICAgICAgICAgdm0ucHJvbWlzZUhhbmRsZWQocHJv
bWlzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBhNTQ4
MWUyZGM2NWY4MjY2NTNlNjhiNjNjOTI3NGYzMjExMjAwYjdiLi44ZDgwNDE5ZDQ3YjFiZDI1NjZj
YjRjZGExMjkxNjc5MjRjNmVkYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CkBAIC0zMTcsNiArMzE3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBU
eXBlKQogICAgICwgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQoMCkKICAgICAsIG1fcHJpbWl0
aXZlR2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKICAgICAsIG1fY29udHJvbEZsb3dQcm9maWxl
ckVuYWJsZWRDb3VudCgwKQorICAgICwgbV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMoKnRo
aXMpCiB7CiAgICAgaWYgKFVOTElLRUxZKHZtQ3JlYXRpb25TaG91bGRDcmFzaCkpCiAgICAgICAg
IENSQVNIX1dJVEhfSU5GTygweDQyNDI0MjQyMjAyMDIwMjAsIDB4YmFkYmVlZjBiYWRiZWVmLCAw
eDEyMzQxMjM0MTIzNDEyMzQsIDB4MTMzNzEzMzcxMzM3MTMzNyk7CkBAIC0xMDg5LDYgKzEwOTAs
ODEgQEAgdm9pZCBWTTo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgUmVmPE1pY3JvdGFzaz4mJiB0YXNrKQogICAgIG1fbWljcm90YXNrUXVldWUuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8UXVldWVkVGFzaz4oKnRoaXMsICZnbG9iYWxPYmplY3QsIFdURk1vdmUo
dGFzaykpKTsKIH0KIAordm9pZCBWTTo6Y2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhKU1By
b21pc2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uLCBKU1Byb21pc2UqIHByb21pc2UpCit7
CisgICAgSlNPYmplY3QqIGNhbGxiYWNrID0gb3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlv
bk9wZXJhdGlvbjo6UmVqZWN0CisgICAgICAgID8gcHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPnVu
aGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCkKKyAgICAgICAgOiBwcm9taXNlLT5nbG9iYWxPYmpl
Y3QoKS0+cmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCk7CisKKyAgICBpZiAoIWNhbGxiYWNrKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgq
dGhpcyk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldENhbGxEYXRhKCp0aGlzLCBjYWxsYmFjaywgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxs
VHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OworICAgIGFyZ3MuYXBwZW5kKHByb21pc2UpOworICAgIGFyZ3MuYXBwZW5kKHByb21pc2UtPnJl
c3VsdCgqdGhpcykpOworICAgIGNhbGwocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKSwgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxsKCksIGFyZ3MpOworICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgVk06OnJlcG9ydFVuaGFuZGxlZFJl
amVjdGlvbnNTb29uKCkKK3sKKyAgICBpZiAobV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJv
bWlzZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdGhpcyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzLmZpcnN0KCktPmdsb2JhbE9i
amVjdCgpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVy
cmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIHByb21pc2VE
ZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZSgqdGhpcywgZGVmZXJyZWQsIHsgfSk7CisK
KyAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihkZWZlcnJlZCwgW3Ro
aXMsIGRlZmVycmVkLCB1bmhhbmRsZWRSZWplY3Rpb25zID0gV1RGTW92ZShtX2Fib3V0VG9CZU5v
dGlmaWVkUmVqZWN0ZWRQcm9taXNlcyldICgpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9taXNl
IDogdW5oYW5kbGVkUmVqZWN0aW9ucykgeworICAgICAgICAgICAgaWYgKHByb21pc2UtPmlzSGFu
ZGxlZCgqdGhpcykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNh
bGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2soSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpS
ZWplY3QsIHByb21pc2UuZ2V0KCkpOworCisgICAgICAgICAgICBpZiAoIXByb21pc2UtPmlzSGFu
ZGxlZCgqdGhpcykpCisgICAgICAgICAgICAgICAgbV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlz
ZXMuc2V0KHByb21pc2UuZ2V0KCksIHByb21pc2UuZ2V0KCkpOworICAgICAgICB9CisgICAgICAg
IGRlZmVycmVkLT5yZXNvbHZlKHVuaGFuZGxlZFJlamVjdGlvbnMuZmlyc3QoKS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwganNVbmRlZmluZWQoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
Vk06OnByb21pc2VSZWplY3RlZChKU1Byb21pc2UqIHByb21pc2UpCit7CisgICAgbV9hYm91dFRv
QmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuY29uc3RydWN0QW5kQXBwZW5kKCp0aGlzLCBwcm9t
aXNlKTsKK30KKwordm9pZCBWTTo6cHJvbWlzZUhhbmRsZWQoSlNQcm9taXNlKiBwcm9taXNlKQor
eworICAgIGJvb2wgd2FzTm90UmVwb3J0ZWQgPSBtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQ
cm9taXNlcy5yZW1vdmVGaXJzdE1hdGNoaW5nKFtwcm9taXNlXSAoU3Ryb25nPEpTUHJvbWlzZT4m
IHVuaGFuZGxlZFByb21pc2UpIHsKKyAgICAgICAgcmV0dXJuIHVuaGFuZGxlZFByb21pc2UuZ2V0
KCkgPT0gcHJvbWlzZTsKKyAgICB9KTsKKworICAgIGlmICh3YXNOb3RSZXBvcnRlZCB8fCAhbV9v
dXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMucmVtb3ZlKHByb21pc2UpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdGhpcyk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHByb21pc2UtPmdsb2JhbE9iamVjdCgpOwor
ICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlD
cmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIHByb21pc2VEZWZlcnJlZFRp
bWVyLT5hZGRQZW5kaW5nUHJvbWlzZSgqdGhpcywgZGVmZXJyZWQsIHsgfSk7CisKKyAgICBwcm9t
aXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihkZWZlcnJlZCwgW3RoaXMsIGRlZmVy
cmVkLCBwcm9taXNlXSAoKSB7CisgICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2so
SlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGUsIHByb21pc2UpOworICAgICAgICBk
ZWZlcnJlZC0+cmVzb2x2ZShwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBq
c1VuZGVmaW5lZCgpKTsKKyAgICB9KTsKK30KKwogdm9pZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkK
IHsKICAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7CkBAIC0xMDk3LDYg
KzExNzMsNyBAQCB2b2lkIFZNOjpkcmFpbk1pY3JvdGFza3MoKQogICAgICAgICAgICAgbV9vbkVh
Y2hNaWNyb3Rhc2tUaWNrKCp0aGlzKTsKICAgICB9CiAgICAgZmluYWxpemVTeW5jaHJvbm91c0pT
RXhlY3V0aW9uKCk7CisgICAgcmVwb3J0VW5oYW5kbGVkUmVqZWN0aW9uc1Nvb24oKTsKIH0KIAog
dm9pZCBRdWV1ZWRUYXNrOjpydW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXgg
NjkwMDQwZGExZDMxOTgzNjExZjc3NzQ3MGY4NGE3M2I4MDQ3Mzg1NC4uNWQ0NTA4Y2FkYmUxMzIz
NjAwMjQxODNmODU2MTRlMDE1NjRhNWMzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CkBAIC0xMjMsNiArMTIzLDcgQEAgY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsK
IGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiBjbGFzcyBKU09iamVjdDsKK2NsYXNzIEpTUHJvbWlzZTsKIGNsYXNzIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIEpTUnVuTG9vcFRpbWVyOwogY2xhc3MgSlNTdHJpbmdI
ZWFwQ2VsbFR5cGU7CkBAIC0xNzMsNiArMTc0LDggQEAgbmFtZXNwYWNlIERPTUpJVCB7CiBjbGFz
cyBTaWduYXR1cmU7CiB9CiAKK2VudW0gY2xhc3MgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9u
IDogdW5zaWduZWQ7CisKIHN0cnVjdCBFbnRyeUZyYW1lOwogc3RydWN0IEhhc2hUYWJsZTsKIHN0
cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTkyNCw2ICs5MjcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBu
b3RpZnlOZWVkVGVybWluYXRpb24oKSB7IG1fdHJhcHMuZmlyZVRyYXAoVk1UcmFwczo6TmVlZFRl
cm1pbmF0aW9uKTsgfQogICAgIHZvaWQgbm90aWZ5TmVlZFdhdGNoZG9nQ2hlY2soKSB7IG1fdHJh
cHMuZmlyZVRyYXAoVk1UcmFwczo6TmVlZFdhdGNoZG9nQ2hlY2spOyB9CiAKKyAgICB2b2lkIHBy
b21pc2VSZWplY3RlZChKU1Byb21pc2UqKTsKKyAgICB2b2lkIHByb21pc2VIYW5kbGVkKEpTUHJv
bWlzZSopOworCiAjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAgICAg
U3RhY2tUcmFjZSogbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93KCkgY29uc3QgeyByZXR1cm4g
bV9uYXRpdmVTdGFja1RyYWNlT2ZMYXN0VGhyb3cuZ2V0KCk7IH0KICAgICBUaHJlYWQqIHRocm93
aW5nVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV90aHJvd2luZ1RocmVhZC5nZXQoKTsgfQpAQCAt
MTAxMCw2ICsxMDE2LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwcmltaXRpdmVHaWdh
Y2FnZURpc2FibGVkQ2FsbGJhY2sodm9pZCopOwogICAgIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VE
aXNhYmxlZCgpOwogCisgICAgdm9pZCBjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKEpTUHJv
bWlzZVJlamVjdGlvbk9wZXJhdGlvbiwgSlNQcm9taXNlKik7CisgICAgdm9pZCByZXBvcnRVbmhh
bmRsZWRSZWplY3Rpb25zU29vbigpOworCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBtX2luaXRpYWxpemluZ09iamVjdENsYXNzOwogI2VuZGlmCkBAIC0x
MDY1LDYgKzEwNzQsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlj
a2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmlu
c2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIFZlY3RvcjxT
dHJvbmc8SlNQcm9taXNlPj4gbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXM7Cisg
ICAgV2Vha0dDTWFwPEpTUHJvbWlzZSosIEpTUHJvbWlzZT4gbV9vdXRzdGFuZGluZ1JlamVjdGVk
UHJvbWlzZXM7CisKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoVk0mKT4gbV9vbkVhY2hNaWNyb3Rh
c2tUaWNrOwogICAgIHVpbnRwdHJfdCBtX2N1cnJlbnRXZWFrUmVmVmVyc2lvbiB7IDAgfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5oIGIvU291cmNlL1dURi93dGYvUnVu
TG9vcC5oCmluZGV4IGQ2MTVlMDc0MGVjMmZmZjIwMGRiZmQ1OTQzZWUyNzgyZmQ5NDdhMWIuLjM0
MjRmYTNhMjk5NmQyYWMwZTlhN2FhZTVmMjIyY2M0NjdlMTc1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1J1bkxvb3AuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKQEAgLTY4
LDcgKzY4LDcgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBHTWFpbkNvbnRleHQq
IG1haW5Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9tYWluQ29udGV4dC5nZXQoKTsgfQogI2Vu
ZGlmCiAKLSNpZiBVU0UoR0VORVJJQ19FVkVOVF9MT09QKSB8fCBVU0UoV0lORE9XU19FVkVOVF9M
T09QKQorI2lmICFVU0UoQ09DT0FfRVZFTlRfTE9PUCkKICAgICAvLyBSdW4gdGhlIHNpbmdsZSBp
dGVyYXRpb24gb2YgdGhlIFJ1bkxvb3AuIEl0IGNvbnN1bWVzIHRoZSBwZW5kaW5nIHRhc2tzIGFu
ZCBleHBpcmVkIHRpbWVycywgYnV0IGl0IHdvbid0IGJlIGJsb2NrZWQuCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGl0ZXJhdGUoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1
bkxvb3BHTGliLmNwcAppbmRleCA1ZTViYThhYmViZGJkNDliYmI4MzdkZDRjNGZkNjliZDZmZmMz
NjFmLi42NTNmZTExYTJiYWM1MzY1NDU3NzgwYzU4ZmIzN2YwMDEyM2U0NWI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL1J1bkxvb3BHTGliLmNwcApAQCAtMTIzLDYgKzEyMywxMyBAQCB2b2lkIFJ1bkxvb3A6
Ondha2VVcCgpCiAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV9zb3VyY2UuZ2V0KCksIDAp
OwogfQogCit2b2lkIFJ1bkxvb3A6Oml0ZXJhdGUoKQoreworICAgIGdfaWRsZV9hZGQoW10gKGdw
b2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9S
RU1PVkU7CisgICAgfSwgbnVsbHB0cik7Cit9CisKIGNsYXNzIERpc3BhdGNoQWZ0ZXJDb250ZXh0
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3ODhlMmU2Nzdm
N2YyMGNkMzlkMjE3MTJjZjg2NzQ2MGI1NmY1YjRiLi44MDMwZDM1NDBmNWIxNDY0OTRjNTA2YmJi
Y2ZiOGUyNDMyYWYxN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCkBAIC0yMTYsMTYgKzIxNiwxMSBAQCB2b2lkIEpTRE9NR2xvYmFs
T2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9iYWxP
YmplY3QsCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uv
d2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNrZXItaW1wbGVtZW50
YXRpb24KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0
ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oanNHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8qIGNvbnRleHQgPSBnbG9iYWxPYmplY3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSW50ZXJuYWxQcm9t
aXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3JpcHRzLgotICAgIGlmIChKU0M6
OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0ludGVybmFsUHJvbWlzZSo+KHZtLCBwcm9taXNlKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IElmIHNjcmlwdCBoYXMgbXV0ZWQgZXJyb3Jz
IChjcm9zcyBvcmlnaW4pLCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuCiAgICAgLy8gPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE3MTQxNT4gSW1wbGVtZW50IHRoZSBgbXV0ZWQtZXJyb3JzYCBwcm9wZXJ0
eSBvZiBTY3JpcHRzIHRvIGF2b2lkIG9uZXJyb3Ivb251bmhhbmRsZWRyZWplY3Rpb24gZm9yIGNy
b3NzLW9yaWdpbiBzY3JpcHRzCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375965</attachid>
            <date>2019-08-09 15:05:21 -0700</date>
            <delta_ts>2019-08-20 17:44:11 -0700</delta_ts>
            <desc>Patch (run loop)</desc>
            <filename>bug-197172-20190809150521.patch</filename>
            <type>text/plain</type>
            <size>33661</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NTdjMjE5ZjU1ZmRiNTdlMGJkZjA5MzRkMTQxZjczOTIyZDIyYTBjLi42N2I0MzRmNzYxMDkwNTM5
MGJmN2RiNTYyNmUyMDMzYzIzOTRjNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxOS0wOC0wOSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIGNhbGxiYWNrcyBmb3IgdW5oYW5kbGVkIGFu
ZCBsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIHRvIGJlIHNldCB2aWEgSlNDJ3MgcHVi
bGljIEMgQVBJLgorICAgICAgICBTaW5jZSB0aGVyZSBpcyBubyB0YXNrIHF1ZXVlIGluIHN1Y2gg
YW4gZW52aXJvbm1lbnQsIHRoZXNlIGNhbGxiYWNrcyBmaXJlIG9mZiBvZiB0aGUgcnVuIGxvb3Au
CisgICAgICAgIENhbGxiYWNrcyByZWNlaXZlIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVh
c29uIGFzIGFyZ3VtZW50cyBhbmQgdGhlaXIgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCisKKyAg
ICAgICAgQSBmdXJ0aGVyIEFQSSBpcyBwcm92aWRlZCB0byBlbnN1cmUgdGhhdCBob3N0IGVudmly
b25tZW50cyBjYW4gaXRlcmF0ZSB0aGUgcnVuIGxvb3AgYW5kIGhhbmRsZSBwZW5kaW5nIHRhc2tz
LgorCisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAgICAgIChKU1J1bkxvb3BJdGVyYXRl
KTogQWRkZWQuCisgICAgICAgICogQVBJL0pTQmFzZVByaXZhdGUuaDoKKyAgICAgICAgKiBBUEkv
SlNDb250ZXh0Lmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1bSlND
b250ZXh0IHNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrOl0pOiBBZGRlZC4KKyAgICAgICAg
KC1bSlNDb250ZXh0IHNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjazpdKTogQWRkZWQuCisgICAg
ICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChKU0dsb2JhbENvbnRleHRTZXRV
bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoSlNHbG9iYWxDb250
ZXh0U2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKTogQWRkZWQuCisgICAgICAgICogQVBJL0pT
Q29udGV4dFJlZi5oOgorICAgICAgICBBZGQgbmV3IHB1YmxpYyBBUEkgY2FsbHMuCisKKyAgICAg
ICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jcHA6CisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVz
b2x2ZVRydWUpOiBDbGVhbiB1cCB0ZXN0IG91dHB1dC4KKyAgICAgICAgKFRlc3RBUEk6OnByb21p
c2VSZWplY3RUcnVlKTogQ2xlYW4gdXAgdGVzdCBvdXRwdXQuCisgICAgICAgIChUZXN0QVBJOjpw
cm9taXNlUmVqZWN0aW9uQ2FsbGJhY2tzKTogQWRkZWQuCisgICAgICAgICh0ZXN0Q0FQSVZpYUNw
cCk6CisgICAgICAgIEFkZCBuZXcgQysrIEFQSSB0ZXN0LgorCisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rp
b25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoZnVuY3Rp
b25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKHJ1bkludGVy
YWN0aXZlKToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgIEFkZCBjb3JyZXNwb25kaW5nIGds
b2JhbHMgdG8gSlNDIHNoZWxsIGFuZCBpdGVyYXRlIHRoZSBydW4gbG9vcCBhZnRlciBlYWNoIGxp
bmUgZXhlY3V0ZWQuCisKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6
IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dW5oYW5kbGVkUmVqZWN0aW9u
Q2FsbGJhY2sgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnNl
dFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6cmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrIGNvbnN0KTogQWRkZWQuCisgICAgICAg
IEtlZXAgc3Ryb25nIHJlZmVyZW5jZXMgdG8gdGhlIGNhbGxiYWNrcy4KKworICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxG
dW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKToKKyAgICAgICAgQWRkIGRlZmF1bHQgYmVo
YXZpb3IuCisKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZN
KToKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6Vk06OnJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnNTb29uKTogQWRk
ZWQuCisgICAgICAgIChKU0M6OlZNOjpwcm9taXNlUmVqZWN0ZWQpOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6Vk06OnByb21pc2VIYW5kbGVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlZNOjpkcmFp
bk1pY3JvdGFza3MpOgorICAgICAgICBNaW1pYyBSZWplY3RlZFByb21pc2VUcmFja2VyIHVzaW5n
IHRoZSBydW4gbG9vcCAodmlhIFByb21pc2VEZWZlcnJlZFRpbWVyKS4KKyAgICAgICAgU3BlY2lm
aWNhbGx5OgorICAgICAgICAgIDEuIFdoZW4gYSBwcm9taXNlIHJlamVjdGlvbiBnb2VzIHVuaGFu
ZGxlZCwgc3RvcmUgdGhlIHByb21pc2UgZm9yIGxhdGVyIHJlcG9ydGluZy4KKyAgICAgICAgICAy
LiBBZnRlciBkcmFpbmluZyBtaWNyb3Rhc2tzLCBzY2hlZHVsZSByZXBvcnRpbmcgb2YgYW55IHN0
b3JlZCB1bmhhbmRsZWQgcmVqZWN0aW9ucy4KKyAgICAgICAgICAzLiBJZiBhbiBhbHJlYWR5LXJl
cG9ydGVkIChhbmQgbm90LXlldC1HQ2VkKSByZWplY3Rpb24gZ2V0cyBoYW5kbGVkIGF0IGEgbGF0
ZXIgdGltZSwKKyAgICAgICAgICAgICBpbW1lZGlhdGVseSBzY2hlZHVsZSBpdCB0byBiZSByZXBv
cnRlZC4KKworICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgU3RvcmUgdW5oYW5kbGVk
IHJlamVjdGlvbnMgKHRoZXNlIGNvbGxlY3Rpb25zIHdpbGwgYWx3YXlzIGJlIGVtcHR5IGluIHRo
ZSBwcmVzZW5jZSBvZiBXZWJDb3JlKS4KKwogMjAxOS0wOC0wOCAgUGVyIEFybmUgVm9sbGFuICA8
cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGludGVybmFsIGJ1aWxkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IDk4ZmIwMjYxN2QzMmI4ODMyYmVkNmY5ZDdmNjc4OGE4MmI2MDA1NDUuLmI4MGI5ZWU0OTE1
ODRiMjg1MTlmMmM3ZDRlMmQ0MmNmNmZkYTZlYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTkt
MDgtMDkgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwdWJsaWMgQVBJIGZvciB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcx
NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9SdW5Mb29wLmg6CisgICAgICAgICogd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjppdGVyYXRlKTogQWRkZWQuCisgICAgICAgIEVuc3VyZSB0aGF0IEdM
aWIncyBSdW5Mb29wIGhhcyBhIHdheSB0byBydW4gZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbi4KKyAg
ICAgICAgKEltcGxlbWVudGF0aW9uIGJhc2VkIG9uIFV0aWxpZXNHTGliIGluIFRlc3RXZWJLaXRB
UEkuKQorCiAyMDE5LTA4LTA4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IHRocmVhZCBzYWZldHkgaXNzdWUgaW4gQXVkaW9TYW1wbGVEYXRhU291cmNlKCkg
Y29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0Mzg1MjgwYzY5ZDhhYjA2ZjA5YTdiZGMzYzE0N2Ez
Yjg1NTU4NzcyLi4yYjUwYzg3Nzc3YWUzNzlmYjkwODk0ZGViNGU4MDgxMjdjZmEzNjRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMDkgIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBwdWJsaWMgQVBJ
IGZvciB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxNzIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0
aW9uVHJhY2tlcik6CisgICAgICAgIE1vdmUgSlNJbnRlcm5hbFByb21pc2UgZWFybHktb3V0IHRv
IEpTQyBzaWRlLgorCiAyMDE5LTA4LTA5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgTWVkaWFTdHJlYW1SZWdpc3RyeQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCmluZGV4IDQ0ZWQ0OTgwOTM5ZDA5ZGE0OGIxODY4MWI4NWM3ZmIwNDA3
ZjE3MTYuLmQ3NGFjMzkzYjJjZmEyZDdkZTE0NGUwOTYxMTRkODJiNGVjMDZmYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKQEAgLTE5MCw2ICsxOTAsMTUgQEAgdm9pZCBKU0Rp
c2FibGVHQ1RpbWVyKHZvaWQpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrOjpzX3Nob3VsZENyZWF0
ZUdDVGltZXIgPSBmYWxzZTsKIH0KIAordm9pZCBKU1J1bkxvb3BJdGVyYXRlKCkKK3sKKyNpZiBV
U0UoQ0YpCisgICAgQ0ZSdW5Mb29wUnVuSW5Nb2RlKGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwgMC4w
LCB0cnVlKTsKKyNlbHNlCisgICAgUnVuTG9vcDo6aXRlcmF0ZSgpOworI2VuZGlmCit9CisKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TCiAvLyBGSVhNRTogRXhwb3Nl
IHN5bWJvbHMgdG8gdGVsbCBkeWxkIHdoZXJlIHRvIGZpbmQgSmF2YVNjcmlwdENvcmUgb24gb2xk
ZXIgdmVyc2lvbnMgb2YKIC8vIGlPUyAoPCA3LjApLiBXZSBzaG91bGQgcmVtb3ZlIHRoZXNlIHN5
bWJvbHMgb25jZSB3ZSBubyBsb25nZXIgbmVlZCB0byBzdXBwb3J0IHN1Y2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlUHJpdmF0ZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0Jhc2VQcml2YXRlLmgKaW5kZXggMmZjOTE2YjcwYTIzZjI1MGI0Yjgy
N2EzYWJhOGQ1MDlkODEyOTA0ZS4uZGY5MWE4NWVlZTJhOGMwNWJiMWI5OTI1MmQ1MzBjZWIxMzA4
MjFlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VQcml2YXRl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VQcml2YXRlLmgKQEAgLTQ3
LDYgKzQ3LDEyIEBAIEpTX0VYUE9SVCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29u
dGV4dFJlZiBjdHgsIHNpemVfdCBzaXplKSBKU0NfQVBJX0FWCiAKIEpTX0VYUE9SVCB2b2lkIEpT
RGlzYWJsZUdDVGltZXIodm9pZCk7CiAKKy8qIQorQGZ1bmN0aW9uCitAYWJzdHJhY3QgUnVucyBh
IHNpbmdsZSBpdGVyYXRpb24gb2YgdGhlIGN1cnJlbnQgcnVuIGxvb3AgdG8gaGFuZGxlIGFueSBw
ZW5kaW5nIHRhc2tzIChlLmcuLCBwcm9taXNlIHJlamVjdGlvbiBldmVudHMpLgorKi8KK0pTX0VY
UE9SVCB2b2lkIEpTUnVuTG9vcEl0ZXJhdGUodm9pZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAppbmRleCA2YjljNWQ0
MTc2MTkzNmQwNjZlNjk2ZDYxYzAzODk0ODg2MGQ2ZTZiLi5lYjQ4ZWU2Yjk2MDhjNTc1MTg1ZjM0
OWZmYmFmZDBkYWRjZjBhY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgK
QEAgLTE3Nyw2ICsxNzcsMjMgQEAgSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC45KSwgaW9z
KDcuMCkpCiBAZGlzY3Vzc2lvbiBOYW1lIG9mIHRoZSBKU0NvbnRleHQuIEV4cG9zZWQgd2hlbiBy
ZW1vdGUgZGVidWdnaW5nIHRoZSBjb250ZXh0LgogKi8KIEBwcm9wZXJ0eSAoY29weSkgTlNTdHJp
bmcgKm5hbWUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSk7CisKKy8q
IQorQG1ldGhvZAorQGFic3RyYWN0IFNldHMgdGhlICJ1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rp
b24iIGNhbGxiYWNrIGZvciBhIEpTQ29udGV4dC4KK0BkaXNjdXNzaW9uIFNpbWlsYXIgdG8gd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicpLCBidXQgZm9yIGEgc3Rh
bmRhbG9uZSBKU0NvbnRleHQuCitAcGFyYW0gZnVuY3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIHNldCwgd2hpY2ggcmVjZWl2ZXMgdGhlIHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24g
YXMgYXJndW1lbnRzLgorKi8KKy0gKHZvaWQpc2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2s6
KEpTVmFsdWUgKilmdW5jdGlvbjsKKworLyohCitAbWV0aG9kCitAYWJzdHJhY3QgU2V0cyB0aGUg
ImxhdGUtaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIgY2FsbGJhY2sgZm9yIGEgSlNDb250ZXh0
LgorQGRpc2N1c3Npb24gU2ltaWxhciB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVqZWN0
aW9uaGFuZGxlZCcpLCBidXQgZm9yIGEgc3RhbmRhbG9uZSBKU0NvbnRleHQuCitAcGFyYW0gZnVu
Y3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCwgd2hpY2ggcmVjZWl2ZXMgdGhlIHBy
b21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMgYXJndW1lbnRzLgorKi8KKy0gKHZvaWQpc2V0
UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrOihKU1ZhbHVlICopZnVuY3Rpb247CisKIEBlbmQKIAog
LyohCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCmluZGV4IDA1ZGU0ZjM0NmQx
OTVhNWNlODk2MzI4YmFhMGI2MzMyNjc0YmViZGUuLjcwNzc1YmZkNWNmMGI5Yjg5ZGJkMWIxOTMx
MTA4YWIwN2UzYzk3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBA
IC0yNjAsNiArMjYwLDMyIEBAIC0gKHZvaWQpc2V0TmFtZTooTlNTdHJpbmcgKiluYW1lCiAgICAg
SlNHbG9iYWxDb250ZXh0U2V0TmFtZShtX2NvbnRleHQsIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVh
dGUobmFtZSkuZ2V0KCkpOwogfQogCistICh2b2lkKXNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrOihKU1ZhbHVlICopZnVuY3Rpb24KK3sKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbk9iamVjdCA9IEpTVmFsdWVUb09iamVj
dChtX2NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1ZShmdW5jdGlvbiksICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtzZWxmIG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRp
b25dOworCisgICAgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2so
bV9jb250ZXh0LCBmdW5jdGlvbk9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlv
bikKKyAgICAgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07Cit9CisKKy0gKHZv
aWQpc2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrOihKU1ZhbHVlICopZnVuY3Rpb24KK3sKKyAg
ICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisKKyAgICBKU09iamVjdFJlZiBmdW5j
dGlvbk9iamVjdCA9IEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1
ZShmdW5jdGlvbiksICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtz
ZWxmIG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNHbG9iYWxDb250ZXh0U2V0
UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKG1fY29udGV4dCwgZnVuY3Rpb25PYmplY3QsICZleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtzZWxmIG5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworfQorCiAtIChCT09MKV9yZW1vdGVJbnNwZWN0aW9uRW5hYmxlZAogewog
ICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRHZXRSZW1vdGVJbnNwZWN0aW9uRW5hYmxlZChtX2Nv
bnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRS
ZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCmluZGV4
IDlmNWZkYWZjNzgxOTZmZTQ0OGMxOGQwNzkxNWUwNGZhMzg2ODRhYWEuLjg3M2VlYmFjZGY4MmIw
YzIxNmFmMGMxZjdhYTIwMWQ3MGY4ZWUzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NvbnRleHRS
ZWZJbnRlcm5hbC5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkFQSVV0aWxz
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGlu
Zy5oIgogI2luY2x1ZGUgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCkBAIC0zNyw2ICszOCw3IEBACiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5j
bHVkZSAiU3RhY2tWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1
ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI0OSw2ICsyNTEsNDUgQEAgdm9pZCBK
U0dsb2JhbENvbnRleHRTZXROYW1lKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVm
IG5hbWUpCiAgICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0TmFtZShuYW1lID8g
bmFtZS0+c3RyaW5nKCkgOiBTdHJpbmcoKSk7CiB9CiAKK3ZvaWQgSlNHbG9iYWxDb250ZXh0U2V0
VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWN0eCkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgSlNPYmplY3QqIG9iamVj
dCA9IHRvSlMoZnVuY3Rpb24pOworICAgIGlmICghb2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkgewor
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKHZtLCBvYmplY3QpOworfQorCit2b2lkIEpTR2xv
YmFsQ29udGV4dFNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhKU0dsb2JhbENvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IGlmICghY3R4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICBKU09i
amVjdCogb2JqZWN0ID0gdG9KUyhmdW5jdGlvbik7CisgICAgaWYgKCFvYmplY3QtPmlzRnVuY3Rp
b24odm0pKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihjcmVhdGVUeXBlRXJyb3IoZXhl
YykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm0udm1FbnRyeUdsb2JhbE9iamVj
dChleGVjKS0+c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKHZtLCBvYmplY3QpOworfQogCiBj
bGFzcyBCYWNrdHJhY2VGdW5jdG9yIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5oCmluZGV4IDFjZTc0MzU4MDRlYmI5YmM0N2Y3YzFmMGQ5ZTk0ZmMwNzg5
ODhjMGIuLjRiMjMxM2M0NDM4YWIzOTEzNGFmZGQ0MTc4MDNlNjY5YTE3MTQxMTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaApAQCAtMTU2LDYgKzE1NiwyNiBAQCBK
U19FWFBPUlQgSlNTdHJpbmdSZWYgSlNHbG9iYWxDb250ZXh0Q29weU5hbWUoSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCkgSlNDX0FQSV9BVgogKi8KIEpTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4
dFNldE5hbWUoSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSkgSlNDX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSk7CiAKKy8qIQorQGZ1bmN0aW9uCitA
YWJzdHJhY3QgU2V0cyB0aGUgInVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIgY2FsbGJhY2sg
Zm9yIGEgY29udGV4dC4KK0BkaXNjdXNzaW9uIEpTQy1vbmx5LCBydW4gbG9vcC1iYXNlZCBhbHRl
cm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJyku
CitAcGFyYW0gY3R4IFRoZSBKU0dsb2JhbENvbnRleHQgdG8gc2V0IHRoZSBjYWxsYmFjayBvbi4K
K0BwYXJhbSBmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0LCB3aGljaCByZWNl
aXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNvbiBhcyBhcmd1bWVudHMuCitAcGFy
YW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBhIEpTVmFsdWVSZWYgaW4gd2hpY2ggdG8gc3RvcmUg
YW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3MgTlVMTCBpZiB5b3UgZG8gbm90IGNhcmUgdG8gc3Rv
cmUgYW4gZXhjZXB0aW9uLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVu
aGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisvKiEKK0BmdW5jdGlvbgor
QGFic3RyYWN0IFNldHMgdGhlICJsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iIGNhbGxi
YWNrIGZvciBhIGNvbnRleHQuCitAZGlzY3Vzc2lvbiBKU0Mtb25seSwgcnVuIGxvb3AtYmFzZWQg
YWx0ZXJuYXRpdmUgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3JlamVjdGlvbmhhbmRsZWQn
KS4KK0BwYXJhbSBjdHggVGhlIEpTR2xvYmFsQ29udGV4dCB0byBzZXQgdGhlIGNhbGxiYWNrIG9u
LgorQHBhcmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJl
Y2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KK0Bw
YXJhbSBleGNlcHRpb24gQSBwb2ludGVyIHRvIGEgSlNWYWx1ZVJlZiBpbiB3aGljaCB0byBzdG9y
ZSBhbiBleGNlcHRpb24sIGlmIGFueS4gUGFzcyBOVUxMIGlmIHlvdSBkbyBub3QgY2FyZSB0byBz
dG9yZSBhbiBleGNlcHRpb24uCisqLworSlNfRVhQT1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0
UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5j
cHAKaW5kZXggMWNmZDRjMDNhMDhiYWQ0MjJlOTQxNDE4ODViYzk3YzBlOGQwZWI2Ni4uMWQzYTIx
NTNhNjY2OWE1NWFjNTQ3MjdlY2ZhY2Q3N2QyYTRkMTdhZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNCYXNlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTT2JqZWN0UmVmUHJpdmF0ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHQuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgpAQCAtMTM3LDYgKzEzOCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN5bWJvbHNEZWxldGVQcm9wZXJ0eUZvcktleSgpOwogICAgIHZvaWQgcHJv
bWlzZVJlc29sdmVUcnVlKCk7CiAgICAgdm9pZCBwcm9taXNlUmVqZWN0VHJ1ZSgpOworICAgIHZv
aWQgcHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrcygpOwogCiAgICAgaW50IGZhaWxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKQEAgLTQ1NCw3ICs0NTYsNyBAQCB2b2lkIFRlc3RBUEk6
OnByb21pc2VSZXNvbHZlVHJ1ZSgpCiAKICAgICBhdXRvIHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCB0cnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRl
eHQsIHJlc29sdmUsIHJlc29sdmUsIDEsICZ0cnVlVmFsdWUsICZleGNlcHRpb24pOwotICAgIGNo
ZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biByZXNvbHZlIHBy
b21pc2UiKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0
aHJvd24gcmVzb2x2aW5nIHByb21pc2UiKTsKICAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAi
dGhlbiByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKIH0KIApA
QCAtNDc5LDcgKzQ4MSw3IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlamVjdFRydWUoKQogCiAg
ICAgQVBJU3RyaW5nIGNhdGNoU3RyaW5nKCJjYXRjaCIpOwogICAgIEpTVmFsdWVSZWYgY2F0Y2hG
dW5jdGlvbiA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcHJvbWlzZSwgY2F0Y2hTdHJp
bmcsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24gJiYgY2F0Y2hGdW5jdGlvbiAm
JiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2F0Y2hGdW5jdGlvbiksICJQcm9taXNlIHNob3Vs
ZCBoYXZlIGEgdGhlbiBvYmplY3QgcHJvcGVydHkiKTsKKyAgICBjaGVjayghZXhjZXB0aW9uICYm
IGNhdGNoRnVuY3Rpb24gJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhdGNoRnVuY3Rpb24p
LCAiUHJvbWlzZSBzaG91bGQgaGF2ZSBhIGNhdGNoIG9iamVjdCBwcm9wZXJ0eSIpOwogCiAgICAg
SlNWYWx1ZVJlZiBwYXNzZWRUcnVlRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhD
YWxsYmFjayhjb250ZXh0LCB0cnVlU3RyaW5nLCBwYXNzZWRUcnVlKTsKICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhdGNoRnVuY3Rp
b24pLCBwcm9taXNlLCAxLCAmcGFzc2VkVHJ1ZUZ1bmN0aW9uLCAmZXhjZXB0aW9uKTsKQEAgLTQ4
Nyw4ICs0ODksNTEgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSgpCiAKICAgICBh
dXRvIHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0cnVlKTsKICAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCAmdHJ1ZVZh
bHVlLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNo
b3VsZCBiZSB0aHJvd24gcmVzb2x2ZSBwcm9taXNlIik7Ci0gICAgY2hlY2socGFzc2VkVHJ1ZUNh
bGxlZCwgInRoZW4gcmVzcG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7
CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJl
amVjdGluZyBwcm9taXNlIik7CisgICAgY2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgImNhdGNoIHJl
c3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOworfQorCit2b2lkIFRl
c3RBUEk6OnByb21pc2VSZWplY3Rpb25DYWxsYmFja3MoKQoreworICAgIEpTT2JqZWN0UmVmIHJl
amVjdDsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIGF1
dG8gcHJvbWlzZSA9IEpTT2JqZWN0TWFrZURlZmVycmVkUHJvbWlzZShjb250ZXh0LCBudWxscHRy
LCAmcmVqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiY3JlYXRpbmcg
YSAocmVqZWN0LW9ubHkpIGRlZmVycmVkIHByb21pc2Ugc2hvdWxkIG5vdCB0aHJvdyIpOworICAg
IHN0YXRpYyBhdXRvIHJlYXNvbiA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIEFQSVN0cmlu
ZygicmVhc29uIikpOworCisgICAgc3RhdGljIFRlc3RBUEkqIHRlc3RlciA9IHRoaXM7CisgICAg
c3RhdGljIGF1dG8gY2FsbGJhY2tDYWxsQ291bnQgPSAwOworCisgICAgYXV0byBjYWxsYmFjayA9
IFtdKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKSAt
PiBKU1ZhbHVlUmVmIHsKKyAgICAgICAgdGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ICYmIEpT
VmFsdWVJc1N0cmljdEVxdWFsKGN0eCwgYXJndW1lbnRzWzBdLCBwcm9taXNlKSwgImNhbGxiYWNr
IHNob3VsZCByZWNlaXZlIHJlamVjdGVkIHByb21pc2UgYXMgZmlyc3QgYXJndW1lbnQiKTsKKyAg
ICAgICAgdGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ID4gMSAmJiBKU1ZhbHVlSXNTdHJpY3RF
cXVhbChjdHgsIGFyZ3VtZW50c1sxXSwgcmVhc29uKSwgImNhbGxiYWNrIHNob3VsZCByZWNlaXZl
IHJlamVjdGlvbiByZWFzb24gYXMgc2Vjb25kIGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+
Y2hlY2soYXJndW1lbnRDb3VudCA9PSAyLCAiY2FsbGJhY2sgc2hvdWxkIG5vdCByZWNlaXZlIGEg
dGhpcmQgYXJndW1lbnQiKTsKKyAgICAgICAgY2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAgfTsKKyAgICBhdXRvIGNhbGxi
YWNrRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBB
UElTdHJpbmcoImNhbGxiYWNrIiksIGNhbGxiYWNrKTsKKworICAgIEpTR2xvYmFsQ29udGV4dFNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrRnVuY3Rpb24sICZl
eGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJzZXR0aW5nIHVuaGFuZGxlZCByZWpl
Y3Rpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCB0aHJvdyIpOworCisgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCByZWplY3QsIHJlamVjdCwgMSwgJnJlYXNvbiwgJmV4Y2VwdGlvbik7
CisgICAgc2xlZXAoMTAwX21zKTsKKyAgICBKU1J1bkxvb3BJdGVyYXRlKCk7CisgICAgY2hlY2so
IWV4Y2VwdGlvbiAmJiBjYWxsYmFja0NhbGxDb3VudCA9PSAxLCAidW5oYW5kbGVkIHJlamVjdGlv
biBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHVwb24gdW5oYW5kbGVkIHJlamVjdGlvbiIpOwor
CisgICAgYXV0byBub29wRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbihjb250ZXh0LCBB
UElTdHJpbmcoIm5vb3AiKSwgMCwgbnVsbHB0ciwgQVBJU3RyaW5nKCIiKSwgbnVsbHB0ciwgMSwg
JmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgImNyZWF0aW5nIGEgbm8tb3AgZnVu
Y3Rpb24gc2hvdWxkIG5vdCB0aHJvdyIpOworCisgICAgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2soY29udGV4dCwgbm9vcEZ1bmN0aW9uLCAmZXhjZXB0aW9uKTsK
KyAgICBjaGVjayghZXhjZXB0aW9uLCAicmVzZXR0aW5nIHVuaGFuZGxlZCByZWplY3Rpb24gY2Fs
bGJhY2sgc2hvdWxkIG5vdCB0aHJvdyIpOworICAgIEpTR2xvYmFsQ29udGV4dFNldFJlamVjdGlv
bkhhbmRsZWRDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFja0Z1bmN0aW9uLCAmZXhjZXB0aW9uKTsK
KyAgICBjaGVjayghZXhjZXB0aW9uLCAic2V0dGluZyByZWplY3Rpb24gaGFuZGxlZCBjYWxsYmFj
ayBzaG91bGQgbm90IHRocm93Iik7CisKKyAgICBhdXRvIGNhdGNoRnVuY3Rpb24gPSBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIHByb21pc2UsIEFQSVN0cmluZygiY2F0Y2giKSwgJmV4Y2Vw
dGlvbik7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpT
T2JqZWN0UmVmPihjYXRjaEZ1bmN0aW9uKSwgcHJvbWlzZSwgMSwgJm5vb3BGdW5jdGlvbiwgJmV4
Y2VwdGlvbik7CisgICAgc2xlZXAoMTAwX21zKTsKKyAgICBKU1J1bkxvb3BJdGVyYXRlKCk7Cisg
ICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYWxsYmFja0NhbGxDb3VudCA9PSAyLCAicmVqZWN0aW9u
IGhhbmRsZWQgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIGxhdGUtaGFuZGxlZCByZWpl
Y3Rpb24iKTsKIH0KIAogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKQEAgLTUyMSw2ICs1NjYsNyBAQCBpbnQgdGVzdENBUElWaWFDcHAoY29u
c3QgY2hhciogZmlsdGVyKQogICAgIFJVTihzeW1ib2xzRGVsZXRlUHJvcGVydHlGb3JLZXkoKSk7
CiAgICAgUlVOKHByb21pc2VSZXNvbHZlVHJ1ZSgpKTsKICAgICBSVU4ocHJvbWlzZVJlamVjdFRy
dWUoKSk7CisgICAgUlVOKHByb21pc2VSZWplY3Rpb25DYWxsYmFja3MoKSk7CiAKICAgICBpZiAo
dGFza3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFMb2dMbigiRmlsdGVyZWQgYWxsIHRlc3Rz
OiBFUlJPUiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA0MTIyZmJlZDIyZWUxNTUyM2QxNGU0
YTg3OWFiYTFhYjg0Nzg2YTA3Li5lYjU3ZjZkOTQ2ZjJjOTFmMzdlN2VhYWZlOTM4NDYyZjJhM2I1
ZTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzg0LDYgKzM4NCw5IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGlzYWJsZVJpY2hTb3VyY2VJbmZvKEV4
ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25N
YWxsb2NJbkFMb29wKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lKEV4ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soRXhlY1N0YXRlKik7CisKIHN0cnVj
dCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0TW9kZSB7CiAgICAgICAgIFN0cmljdCwK
QEAgLTYzOCw2ICs2NDEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
ZGlzYWJsZVJpY2hTb3VyY2VJbmZvIiwgZnVuY3Rpb25EaXNhYmxlUmljaFNvdXJjZUluZm8sIDAp
OwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm1hbGxvY0luQUxvb3AiLCBmdW5jdGlvbk1hbGxv
Y0luQUxvb3AsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInRvdGFsQ29tcGlsZVRpbWUi
LCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUsIDApOworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAic2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2siLCBmdW5jdGlvblNldFVuaGFuZGxlZFJl
amVjdGlvbkNhbGxiYWNrLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJzZXRSZWplY3Rp
b25IYW5kbGVkQ2FsbGJhY2siLCBmdW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjaywg
MSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCog
b2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKQpAQCAtMjM4NCw2ICsyMzkwLDMyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2ViQXNzZW1ibHlNZW1vcnlNb2RlKEV4ZWNTdGF0ZSog
ZXhlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogb2Jq
ZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+aXNG
dW5jdGlvbih2bSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKKworICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2sodm0sIG9iamVjdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNl
dFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCku
Z2V0T2JqZWN0KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+aXNGdW5jdGlvbih2bSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKworICAgIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKHZtLCBvYmplY3QpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIC8vIFVzZSBT
RUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0
IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBE
ZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1
bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CkBAIC0y
NzE4LDEzICsyNzUwLDE4IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25F
eGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKGxpbmUsIHNvdXJjZU9yaWdpbiwgc291cmNl
T3JpZ2luLnN0cmluZygpKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRp
ZgotICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50Zigi
RXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1dURlN0cmlu
ZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKLSAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAgICAgICAgICBp
ZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkudG9XVEZTdHJpbmcoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygp
OworICAgICAgICB9CisgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5ydW5SdW5Mb29w
KCk7CiAgICAgfQogICAgIHByaW50ZigiXG4iKTsKIH0KQEAgLTI5NzcsMTEgKzMwMTQsOSBAQCBp
bnQgcnVuSlNDKGNvbnN0IENvbW1hbmRMaW5lJiBvcHRpb25zLCBib29sIGlzV29ya2VyLCBjb25z
dCBGdW5jJiBmdW5jKQogICAgICAgICB2bS5kcmFpbk1pY3JvdGFza3MoKTsKICAgICB9CiAgICAg
dm0ucHJvbWlzZURlZmVycmVkVGltZXItPnJ1blJ1bkxvb3AoKTsKLSAgICB7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOwotICAgICAgICBpZiAob3B0aW9ucy5tX2ludGVyYWN0aXZl
ICYmIHN1Y2Nlc3MpCi0gICAgICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOwot
ICAgIH0KKworICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKKyAgICAg
ICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKIAogICAgIHJlc3VsdCA9IHN1Y2Nlc3Mg
JiYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzID09IGFzeW5jVGVzdFBhc3NlcykgPyAwIDogMzsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5k
ZXggMDQ3YzE2NjUzZTcxYjFhODA2YmQ5ZmM3ZDU2NjQzYTVmOTg4ZjExZS4uMzA3Y2M0NWRhMTNh
MjAxZDM0ZjU2ZDNjODFiYWNlYTE5NjgwODI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00MjUsNiArNDI1LDkgQEAgcHVibGljOgog
CiAgICAgU3RyaW5nIG1fbmFtZTsKIAorICAgIFN0cm9uZzxKU09iamVjdD4gbV91bmhhbmRsZWRS
ZWplY3Rpb25DYWxsYmFjazsKKyAgICBTdHJvbmc8SlNPYmplY3Q+IG1fcmVqZWN0aW9uSGFuZGxl
ZENhbGxiYWNrOworCiAgICAgRGVidWdnZXIqIG1fZGVidWdnZXI7CiAKICAgICBWTSYgbV92bTsK
QEAgLTgwNCw2ICs4MDcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJp
bmcmKTsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
IAorICAgIHZvaWQgc2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soVk0mIHZtLCBKU09iamVj
dCogZnVuY3Rpb24pIHsgbV91bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjay5zZXQodm0sIGZ1bmN0
aW9uKTsgfQorICAgIEpTT2JqZWN0KiB1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2suZ2V0KCk7IH0KKworICAgIHZv
aWQgc2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKFZNJiB2bSwgSlNPYmplY3QqIGZ1bmN0aW9u
KSB7IG1fcmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrLnNldCh2bSwgZnVuY3Rpb24pOyB9CisgICAg
SlNPYmplY3QqIHJlamVjdGlvbkhhbmRsZWRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fcmVq
ZWN0aW9uSGFuZGxlZENhbGxiYWNrLmdldCgpOyB9CisKICAgICBKU09iamVjdCogYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuY29u
c3RydWN0b3IodGhpcyk7IH0KIAogICAgIEpTT2JqZWN0KiBhcnJheUJ1ZmZlclByb3RvdHlwZShB
cnJheUJ1ZmZlclNoYXJpbmdNb2RlIHNoYXJpbmdNb2RlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
CmluZGV4IDA4MTE0Y2E2OTYwNmIwYzMyNjM5YzE0MWVlOGY4NmZmNDM1ZWFhMDQuLjY5NWQ2ZGE1
YmI5NjMyNzE0ZmU4NzBlOTUwNTBhOWI4ZWNjNjFmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAg
LTc2NiwxMCArNzY2LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcihFeGVjU3RhdGUqIGV4CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgp
LT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcikKKyAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nh
c3Q8SlNQcm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgLy8gSW50ZXJuYWxQcm9t
aXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3JpcHRzLgorICAgIGlmIChwcm9t
aXNlLT5pbmhlcml0czxKU0ludGVybmFsUHJvbWlzZT4odm0pKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgSlNQcm9taXNlKiBwcm9taXNlID0g
anNDYXN0PEpTUHJvbWlzZSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBKU1ZhbHVlIG9wZXJh
dGlvblZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKICAgICBBU1NFUlQob3BlcmF0aW9uVmFs
dWUuaXNOdW1iZXIoKSk7CkBAIC03NzcsNyArNzc5LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcihFeGVjU3RhdGUq
IGV4CiAgICAgQVNTRVJUKG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246
OlJlamVjdCB8fCBvcGVyYXRpb24gPT0gSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5k
bGUpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAKLSAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKGdsb2Jh
bE9iamVjdCwgZXhlYywgcHJvbWlzZSwgb3BlcmF0aW9uKTsKKyAgICBpZiAoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcikKKyAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVq
ZWN0aW9uVHJhY2tlcihnbG9iYWxPYmplY3QsIGV4ZWMsIHByb21pc2UsIG9wZXJhdGlvbik7Cisg
ICAgZWxzZSB7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgSlNQ
cm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpSZWplY3Q6CisgICAgICAgICAgICB2bS5wcm9taXNl
UmVqZWN0ZWQocHJvbWlzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1By
b21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZToKKyAgICAgICAgICAgIHZtLnByb21pc2VI
YW5kbGVkKHByb21pc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
aW5kZXggN2FkOGFmMjYwNWM5NWI1ZTI3Zjk2M2Y2ZTljNTc5ZDI4NmQ0YTljOS4uYWMxMjk0NTQ0
MWQ3MTYwMGU2Y2FhM2JiMmZlZmJmMWNmYTY1ODI0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcApAQCAtMzE3LDYgKzMxNyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50KDApCiAgICAg
LCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZChJc1dhdGNoZWQpCiAgICAgLCBtX2NvbnRyb2xG
bG93UHJvZmlsZXJFbmFibGVkQ291bnQoMCkKKyAgICAsIG1fb3V0c3RhbmRpbmdSZWplY3RlZFBy
b21pc2VzKCp0aGlzKQogewogICAgIGlmIChVTkxJS0VMWSh2bUNyZWF0aW9uU2hvdWxkQ3Jhc2gp
KQogICAgICAgICBDUkFTSF9XSVRIX0lORk8oMHg0MjQyNDI0MjIwMjAyMDIwLCAweGJhZGJlZWYw
YmFkYmVlZiwgMHgxMjM0MTIzNDEyMzQxMjM0LCAweDEzMzcxMzM3MTMzNzEzMzcpOwpAQCAtMTA5
MCw2ICsxMDkxLDgxIEBAIHZvaWQgVk06OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZjxNaWNyb3Rhc2s+JiYgdGFzaykKICAgICBtX21pY3JvdGFza1F1ZXVl
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFF1ZXVlZFRhc2s+KCp0aGlzLCAmZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKK3ZvaWQgVk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2Fs
bGJhY2soSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbiwgSlNQcm9taXNlKiBw
cm9taXNlKQoreworICAgIEpTT2JqZWN0KiBjYWxsYmFjayA9IG9wZXJhdGlvbiA9PSBKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdAorICAgICAgICA/IHByb21pc2UtPmdsb2JhbE9i
amVjdCgpLT51bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpCisgICAgICAgIDogcHJvbWlzZS0+
Z2xvYmFsT2JqZWN0KCktPnJlamVjdGlvbkhhbmRsZWRDYWxsYmFjaygpOworCisgICAgaWYgKCFj
YWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUoKnRoaXMpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YSgqdGhpcywgY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAgICBB
U1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZChwcm9taXNlKTsKKyAgICBhcmdzLmFwcGVuZChw
cm9taXNlLT5yZXN1bHQoKnRoaXMpKTsKKyAgICBjYWxsKHByb21pc2UtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzTnVsbCgpLCBh
cmdzKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworfQorCit2b2lkIFZNOjpyZXBvcnRV
bmhhbmRsZWRSZWplY3Rpb25zU29vbigpCit7CisgICAgaWYgKG1fYWJvdXRUb0JlTm90aWZpZWRS
ZWplY3RlZFByb21pc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnRoaXMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcy5maXJzdCgp
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU1By
b21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9i
YWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAg
ICBwcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UoKnRoaXMsIGRlZmVycmVk
LCB7IH0pOworCisgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24oZGVm
ZXJyZWQsIFt0aGlzLCBkZWZlcnJlZCwgdW5oYW5kbGVkUmVqZWN0aW9ucyA9IFdURk1vdmUobV9h
Ym91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMpXSAoKSB7CisgICAgICAgIGZvciAoYXV0
byYgcHJvbWlzZSA6IHVuaGFuZGxlZFJlamVjdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChwcm9t
aXNlLT5pc0hhbmRsZWQoKnRoaXMpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKEpTUHJvbWlzZVJlamVjdGlvbk9w
ZXJhdGlvbjo6UmVqZWN0LCBwcm9taXNlLmdldCgpKTsKKworICAgICAgICAgICAgaWYgKCFwcm9t
aXNlLT5pc0hhbmRsZWQoKnRoaXMpKQorICAgICAgICAgICAgICAgIG1fb3V0c3RhbmRpbmdSZWpl
Y3RlZFByb21pc2VzLnNldChwcm9taXNlLmdldCgpLCBwcm9taXNlLmdldCgpKTsKKyAgICAgICAg
fQorICAgICAgICBkZWZlcnJlZC0+cmVzb2x2ZSh1bmhhbmRsZWRSZWplY3Rpb25zLmZpcnN0KCkt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGpzVW5kZWZpbmVkKCkpOworICAgIH0pOwor
fQorCit2b2lkIFZNOjpwcm9taXNlUmVqZWN0ZWQoSlNQcm9taXNlKiBwcm9taXNlKQoreworICAg
IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzLmNvbnN0cnVjdEFuZEFwcGVuZCgq
dGhpcywgcHJvbWlzZSk7Cit9CisKK3ZvaWQgVk06OnByb21pc2VIYW5kbGVkKEpTUHJvbWlzZSog
cHJvbWlzZSkKK3sKKyAgICBib29sIHdhc05vdFJlcG9ydGVkID0gbV9hYm91dFRvQmVOb3RpZmll
ZFJlamVjdGVkUHJvbWlzZXMucmVtb3ZlRmlyc3RNYXRjaGluZyhbcHJvbWlzZV0gKFN0cm9uZzxK
U1Byb21pc2U+JiB1bmhhbmRsZWRQcm9taXNlKSB7CisgICAgICAgIHJldHVybiB1bmhhbmRsZWRQ
cm9taXNlLmdldCgpID09IHByb21pc2U7CisgICAgfSk7CisKKyAgICBpZiAod2FzTm90UmVwb3J0
ZWQgfHwgIW1fb3V0c3RhbmRpbmdSZWplY3RlZFByb21pc2VzLnJlbW92ZShwcm9taXNlKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnRo
aXMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBwcm9taXNlLT5nbG9iYWxP
YmplY3QoKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3Qp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBwcm9taXNl
RGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UoKnRoaXMsIGRlZmVycmVkLCB7IH0pOwor
CisgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24oZGVmZXJyZWQsIFt0
aGlzLCBkZWZlcnJlZCwgcHJvbWlzZV0gKCkgeworICAgICAgICBjYWxsUHJvbWlzZVJlamVjdGlv
bkNhbGxiYWNrKEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6SGFuZGxlLCBwcm9taXNlKTsK
KyAgICAgICAgZGVmZXJyZWQtPnJlc29sdmUocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwganNVbmRlZmluZWQoKSk7CisgICAgfSk7Cit9CisKIHZvaWQgVk06OmRyYWluTWlj
cm90YXNrcygpCiB7CiAgICAgd2hpbGUgKCFtX21pY3JvdGFza1F1ZXVlLmlzRW1wdHkoKSkgewpA
QCAtMTA5OCw2ICsxMTc0LDcgQEAgdm9pZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkKICAgICAgICAg
ICAgIG1fb25FYWNoTWljcm90YXNrVGljaygqdGhpcyk7CiAgICAgfQogICAgIGZpbmFsaXplU3lu
Y2hyb25vdXNKU0V4ZWN1dGlvbigpOworICAgIHJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnNTb29u
KCk7CiB9CiAKIHZvaWQgUXVldWVkVGFzazo6cnVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCmluZGV4IGMxMGYzN2VjNjQ2MGM2NmEzYjE5ZDZjYjMzYmEwYTRkMmVhYTdlNTAuLmU2MjBk
M2JlMmIzMmI0YzYzYTUzMGQ5NjZiYzFhNDA0OWZmMjlkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaApAQCAtMTIzLDYgKzEyMyw3IEBAIGNsYXNzIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb247CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKIGNsYXNz
IEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CitjbGFzcyBKU1Byb21pc2U7CiBjbGFz
cyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1J1bkxvb3BUaW1lcjsKIGNsYXNz
IEpTU3RyaW5nSGVhcENlbGxUeXBlOwpAQCAtMTczLDYgKzE3NCw4IEBAIG5hbWVzcGFjZSBET01K
SVQgewogY2xhc3MgU2lnbmF0dXJlOwogfQogCitlbnVtIGNsYXNzIEpTUHJvbWlzZVJlamVjdGlv
bk9wZXJhdGlvbiA6IHVuc2lnbmVkOworCiBzdHJ1Y3QgRW50cnlGcmFtZTsKIHN0cnVjdCBIYXNo
VGFibGU7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC05MjIsNiArOTI1LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgbm90aWZ5TmVlZFRlcm1pbmF0aW9uKCkgeyBtX3RyYXBzLmZpcmVUcmFwKFZNVHJh
cHM6Ok5lZWRUZXJtaW5hdGlvbik7IH0KICAgICB2b2lkIG5vdGlmeU5lZWRXYXRjaGRvZ0NoZWNr
KCkgeyBtX3RyYXBzLmZpcmVUcmFwKFZNVHJhcHM6Ok5lZWRXYXRjaGRvZ0NoZWNrKTsgfQogCisg
ICAgdm9pZCBwcm9taXNlUmVqZWN0ZWQoSlNQcm9taXNlKik7CisgICAgdm9pZCBwcm9taXNlSGFu
ZGxlZChKU1Byb21pc2UqKTsKKwogI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FU
SU9OKQogICAgIFN0YWNrVHJhY2UqIG5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RUaHJvdygpIGNvbnN0
IHsgcmV0dXJuIG1fbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93LmdldCgpOyB9CiAgICAgVGhy
ZWFkKiB0aHJvd2luZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyb3dpbmdUaHJlYWQuZ2V0
KCk7IH0KQEAgLTEwMDgsNiArMTAxNCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcHJp
bWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKICAgICB2b2lkIHByaW1pdGl2
ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIAorICAgIHZvaWQgY2FsbFByb21pc2VSZWplY3Rpb25DYWxs
YmFjayhKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24sIEpTUHJvbWlzZSopOworICAgIHZvaWQg
cmVwb3J0VW5oYW5kbGVkUmVqZWN0aW9uc1Nvb24oKTsKKwogI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQogICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKICNl
bmRpZgpAQCAtMTA2Myw2ICsxMDcyLDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2hhZG93Q2hpY2tlbj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAg
ICBWZWN0b3I8U3Ryb25nPEpTUHJvbWlzZT4+IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFBy
b21pc2VzOworICAgIFdlYWtHQ01hcDxKU1Byb21pc2UqLCBKU1Byb21pc2U+IG1fb3V0c3RhbmRp
bmdSZWplY3RlZFByb21pc2VzOworCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFZNJik+IG1fb25F
YWNoTWljcm90YXNrVGljazsKICAgICB1aW50cHRyX3QgbV9jdXJyZW50V2Vha1JlZlZlcnNpb24g
eyAwIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaCBiL1NvdXJjZS9X
VEYvd3RmL1J1bkxvb3AuaAppbmRleCBkNjE1ZTA3NDBlYzJmZmYyMDBkYmZkNTk0M2VlMjc4MmZk
OTQ3YTFiLi4zNDI0ZmEzYTI5OTZkMmFjMGU5YTdhYWU1ZjIyMmNjNDY3ZTE3NWZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKKysrIGIvU291cmNlL1dURi93dGYvUnVuTG9v
cC5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgR01h
aW5Db250ZXh0KiBtYWluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkNvbnRleHQuZ2V0
KCk7IH0KICNlbmRpZgogCi0jaWYgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkgfHwgVVNFKFdJTkRP
V1NfRVZFTlRfTE9PUCkKKyNpZiAhVVNFKENPQ09BX0VWRU5UX0xPT1ApCiAgICAgLy8gUnVuIHRo
ZSBzaW5nbGUgaXRlcmF0aW9uIG9mIHRoZSBSdW5Mb29wLiBJdCBjb25zdW1lcyB0aGUgcGVuZGlu
ZyB0YXNrcyBhbmQgZXhwaXJlZCB0aW1lcnMsIGJ1dCBpdCB3b24ndCBiZSBibG9ja2VkLgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBpdGVyYXRlKCk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwIGIvU291cmNlL1dURi93
dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKaW5kZXggNWU1YmE4YWJlYmRiZDQ5YmJiODM3ZGQ0YzRm
ZDY5YmQ2ZmZjMzYxZi4uNjUzZmUxMWEyYmFjNTM2NTQ1Nzc4MGM1OGZiMzdmMDAxMjNlNDViOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKQEAgLTEyMyw2ICsxMjMsMTMgQEAgdm9p
ZCBSdW5Mb29wOjp3YWtlVXAoKQogICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fc291cmNl
LmdldCgpLCAwKTsKIH0KIAordm9pZCBSdW5Mb29wOjppdGVyYXRlKCkKK3sKKyAgICBnX2lkbGVf
YWRkKFtdIChncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICByZXR1cm4g
R19TT1VSQ0VfUkVNT1ZFOworICAgIH0sIG51bGxwdHIpOworfQorCiBjbGFzcyBEaXNwYXRjaEFm
dGVyQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXgg
Nzg4ZTJlNjc3ZjdmMjBjZDM5ZDIxNzEyY2Y4Njc0NjBiNTZmNWI0Yi4uODAzMGQzNTQwZjViMTQ2
NDk0YzUwNmJiYmNmYjhlMjQzMmFmMTdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtMjE2LDE2ICsyMTYsMTEgQEAgdm9pZCBK
U0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3Qq
IGpzR2xvYmFsT2JqZWN0LAogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
bXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2Vy
LWltcGxlbWVudGF0aW9uCiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8mIGds
b2JhbE9iamVjdCA9ICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGpzR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvKiBjb250ZXh0ID0gZ2xvYmFsT2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIElu
dGVybmFsUHJvbWlzZXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHVzZXIgc2NyaXB0cy4KLSAg
ICBpZiAoSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNJbnRlcm5hbFByb21pc2UqPih2bSwgcHJv
bWlzZSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHQgaGFzIG11
dGVkIGVycm9ycyAoY3Jvc3Mgb3JpZ2luKSwgdGVybWluYXRlIHRoZXNlIHN0ZXBzLgogICAgIC8v
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzE0MTU+IEltcGxlbWVudCB0aGUgYG11dGVkLWVycm9y
c2AgcHJvcGVydHkgb2YgU2NyaXB0cyB0byBhdm9pZCBvbmVycm9yL29udW5oYW5kbGVkcmVqZWN0
aW9uIGZvciBjcm9zcy1vcmlnaW4gc2NyaXB0cwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376286</attachid>
            <date>2019-08-14 11:48:40 -0700</date>
            <delta_ts>2019-08-20 17:44:13 -0700</delta_ts>
            <desc>Patch (microtask queue)</desc>
            <filename>bug-197172-20190814114840.patch</filename>
            <type>text/plain</type>
            <size>27563</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
N2I5NTJiOWUxODQ2OWQ0YzlhMDNlNDhiNDA1NmVkODU2MWI1M2NkLi45ZjE3NTAwODRiZjNlMmMx
MGM3OGIwMDFlNzliNjcwYjk2NDcyODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxOS0wOC0xNCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIGNhbGxiYWNrcyBmb3IgdW5oYW5kbGVkIGFu
ZCBsYXRlLWhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIHRvIGJlIHNldCB2aWEgSlNDJ3MgcHVi
bGljIEFQSS4KKyAgICAgICAgU2luY2UgdGhlcmUgaXMgbm8gZXZlbnQgbG9vcCBpbiBzdWNoIGFu
IGVudmlyb25tZW50LCB0aGVzZSBjYWxsYmFja3MgZmlyZSBvZmYgb2YgdGhlIG1pY3JvdGFzayBx
dWV1ZS4KKyAgICAgICAgQ2FsbGJhY2tzIHJlY2VpdmUgdGhlIHByb21pc2UgYW5kIHJlamVjdGlv
biByZWFzb24gYXMgYXJndW1lbnRzIGFuZCB0aGVpciByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4K
KworICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1t
OgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2s6XSk6
IEFkZGVkLgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNr
Ol0pOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpT
R2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2spOiBBZGRlZC4K
KyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmg6CisgICAgICAgIEFkZCBuZXcgcHVibGljIEFQ
SSBjYWxscy4KKworICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmNwcDoKKyAgICAgICAgKFRl
c3RBUEk6OnByb21pc2VSZXNvbHZlVHJ1ZSk6IENsZWFuIHVwIHRlc3Qgb3V0cHV0LgorICAgICAg
ICAoVGVzdEFQSTo6cHJvbWlzZVJlamVjdFRydWUpOiBDbGVhbiB1cCB0ZXN0IG91dHB1dC4KKyAg
ICAgICAgKFRlc3RBUEk6OnByb21pc2VSZWplY3Rpb25DYWxsYmFja3MpOiBBZGRlZC4KKyAgICAg
ICAgKHRlc3RDQVBJVmlhQ3BwKToKKyAgICAgICAgQWRkIG5ldyBDKysgQVBJIHRlc3QuCisKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQu
CisgICAgICAgIChmdW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayk6IEFkZGVkLgor
ICAgICAgICBBZGQgY29ycmVzcG9uZGluZyBnbG9iYWxzIHRvIEpTQyBzaGVsbC4KKworICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0Ojp1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayBjb25zdCk6IEFkZGVk
LgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6c2V0UmVqZWN0aW9uSGFuZGxlZENhbGxi
YWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZWplY3Rpb25IYW5k
bGVkQ2FsbGJhY2sgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgS2VlcCBzdHJvbmcgcmVmZXJlbmNl
cyB0byB0aGUgY2FsbGJhY2tzLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlv
blRyYWNrZXIpOgorICAgICAgICBBZGQgZGVmYXVsdCBiZWhhdmlvci4KKworICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6
Y2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTTo6
ZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKTogQWRkZWQuCisgICAgICAgIChKU0M6OlZNOjpwcm9t
aXNlUmVqZWN0ZWQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Vk06OnByb21pc2VIYW5kbGVkKTog
QWRkZWQuCisgICAgICAgIChKU0M6OlZNOjpkcmFpbk1pY3JvdGFza3MpOgorICAgICAgICBXaGVu
IG1pY3JvdGFzayBxdWV1ZSBpcyBleGhhdXN0ZWQsIGRlYWwgd2l0aCBhbnkgcGVuZGluZyB1bmhh
bmRsZWQgLyBsYXRlLWhhbmRsZWQgcmVqZWN0aW9ucworICAgICAgICAoaW4gYSBtYW5uZXIgYmFz
ZWQgb24gUmVqZWN0ZWRQcm9taXNlVHJhY2tlcidzIHJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnMg
YW5kIHJlcG9ydFJlamVjdGlvbkhhbmRsZWQpLAorICAgICAgICB0aGVuIG1ha2Ugc3VyZSB0aGlz
IGRpZG4ndCBjYXVzZSBhbnkgbmV3IG1pY3JvdGFza3MgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVl
LgorCisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICBTdG9yZSByZWplY3Rpb25zIG9m
IHZhcmlvdXMgc3RhdGVzICh0aGVzZSBjb2xsZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSBlbXB0eSBp
biB0aGUgcHJlc2VuY2Ugb2YgV2ViQ29yZSkuCisKIDIwMTktMDgtMTMgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgd2F5IHRvIG9wdCBvdXQgb2Yga2Vy
biBUQ1NNIGZvciBsYXlvdXQgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWMwODQ1MWZjNDUzOTNmODll
MTYwMjM5ZjVlZGE4ZjA2MGFhYzgwLi5iN2Y0NjNlM2RiNzg2NTFmZmIwMmEyNzMxNWJjNDdmNWUz
NWYwOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMTQgIFJvc3MgS2ly
c2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2
ZSBwdWJsaWMgQVBJIGZvciB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxNzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojpw
cm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAgICAgIE1vdmUgSlNJbnRlcm5hbFByb21pc2Ug
ZWFybHktb3V0IHRvIEpTQyBzaWRlLgorCiAyMDE5LTA4LTE0ICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBJbXBsZW1lbnQgVGFibGVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0LmgKaW5kZXggNmI5YzVkNDE3NjE5MzZkMDY2ZTY5NmQ2MWMwMzg5
NDg4NjBkNmU2Yi4uZWI0OGVlNmI5NjA4YzU3NTE4NWYzNDlmZmJhZmQwZGFkY2YwYWNhYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCkBAIC0xNzcsNiArMTc3LDIzIEBAIEpT
Q19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuOSksIGlvcyg3LjApKQogQGRpc2N1c3Npb24gTmFt
ZSBvZiB0aGUgSlNDb250ZXh0LiBFeHBvc2VkIHdoZW4gcmVtb3RlIGRlYnVnZ2luZyB0aGUgY29u
dGV4dC4KICovCiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICpuYW1lIEpTQ19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEwKSwgaW9zKDguMCkpOworCisvKiEKK0BtZXRob2QKK0BhYnN0cmFjdCBT
ZXRzIHRoZSAidW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIiBjYWxsYmFjayBmb3IgYSBKU0Nv
bnRleHQuCitAZGlzY3Vzc2lvbiBTaW1pbGFyIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1
bmhhbmRsZWRyZWplY3Rpb24nKSwgYnV0IGZvciBhIHN0YW5kYWxvbmUgSlNDb250ZXh0LgorQHBh
cmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVz
IHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KKyovCistICh2
b2lkKXNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrOihKU1ZhbHVlICopZnVuY3Rpb247CisK
Ky8qIQorQG1ldGhvZAorQGFic3RyYWN0IFNldHMgdGhlICJsYXRlLWhhbmRsZWQgcHJvbWlzZSBy
ZWplY3Rpb24iIGNhbGxiYWNrIGZvciBhIEpTQ29udGV4dC4KK0BkaXNjdXNzaW9uIFNpbWlsYXIg
dG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3JlamVjdGlvbmhhbmRsZWQnKSwgYnV0IGZvciBh
IHN0YW5kYWxvbmUgSlNDb250ZXh0LgorQHBhcmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5j
dGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVh
c29uIGFzIGFyZ3VtZW50cy4KKyovCistICh2b2lkKXNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFj
azooSlNWYWx1ZSAqKWZ1bmN0aW9uOworCiBAZW5kCiAKIC8qIQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dC5tbQppbmRleCAwNWRlNGYzNDZkMTk1YTVjZTg5NjMyOGJhYTBiNjMzMjY3
NGJlYmRlLi43MDc3NWJmZDVjZjBiOWI4OWRiZDFiMTkzMTEwOGFiMDdlM2M5Nzk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtMjYwLDYgKzI2MCwzMiBAQCAtICh2
b2lkKXNldE5hbWU6KE5TU3RyaW5nICopbmFtZQogICAgIEpTR2xvYmFsQ29udGV4dFNldE5hbWUo
bV9jb250ZXh0LCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG5hbWUpLmdldCgpKTsKIH0KIAor
LSAodm9pZClzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjazooSlNWYWx1ZSAqKWZ1bmN0aW9u
Cit7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworCisgICAgSlNPYmplY3RS
ZWYgZnVuY3Rpb25PYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QobV9jb250ZXh0LCB2YWx1ZUludGVy
bmFsVmFsdWUoZnVuY3Rpb24pLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAg
ICAgICBbc2VsZiBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTR2xvYmFsQ29u
dGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKG1fY29udGV4dCwgZnVuY3Rpb25PYmpl
Y3QsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtzZWxmIG5vdGlm
eUV4Y2VwdGlvbjpleGNlcHRpb25dOworfQorCistICh2b2lkKXNldFJlamVjdGlvbkhhbmRsZWRD
YWxsYmFjazooSlNWYWx1ZSAqKWZ1bmN0aW9uCit7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24g
PSBudWxscHRyOworCisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb25PYmplY3QgPSBKU1ZhbHVlVG9P
YmplY3QobV9jb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUoZnVuY3Rpb24pLCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBbc2VsZiBub3RpZnlFeGNlcHRpb246ZXhj
ZXB0aW9uXTsKKworICAgIEpTR2xvYmFsQ29udGV4dFNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFj
ayhtX2NvbnRleHQsIGZ1bmN0aW9uT2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0
aW9uKQorICAgICAgICBbc2VsZiBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKK30KKwogLSAo
Qk9PTClfcmVtb3RlSW5zcGVjdGlvbkVuYWJsZWQKIHsKICAgICByZXR1cm4gSlNHbG9iYWxDb250
ZXh0R2V0UmVtb3RlSW5zcGVjdGlvbkVuYWJsZWQobV9jb250ZXh0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAppbmRleCA3NzFiZjUyZWRjZjI4YzNiMTQ1ZDNm
NWRjYWYyMDExMDc0MDViMTA3Li44YTkyMTc0OWQ5ZDI3ZWU5OWNjMDU2OTQ1MDQ3ZGVlNTFjNmJm
MzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmSW50ZXJuYWwuaCIKIAogI2luY2x1
ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJBUElVdGlscy5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJKU0FQSUds
b2JhbE9iamVjdC5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgor
I2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CkBAIC0yNTIsNiArMjU0LDQ1IEBAIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0TmFtZShK
U0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBuYW1lKQogICAgIHZtLnZtRW50cnlH
bG9iYWxPYmplY3QoZXhlYyktPnNldE5hbWUobmFtZSA/IG5hbWUtPnN0cmluZygpIDogU3RyaW5n
KCkpOwogfQogCit2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTKGZ1bmN0aW9uKTsKKyAg
ICBpZiAoIW9iamVjdC0+aXNGdW5jdGlvbih2bSkpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxs
YmFjayh2bSwgb2JqZWN0KTsKK30KKwordm9pZCBKU0dsb2JhbENvbnRleHRTZXRSZWplY3Rpb25I
YW5kbGVkQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWN0eCkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMoZnVu
Y3Rpb24pOworICAgIGlmICghb2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkgeworICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldFJlamVjdGlvbkhh
bmRsZWRDYWxsYmFjayh2bSwgb2JqZWN0KTsKK30KIAogY2xhc3MgQmFja3RyYWNlRnVuY3RvciB7
CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaAppbmRleCAx
Y2U3NDM1ODA0ZWJiOWJjNDdmN2MxZjBkOWU5NGZjMDc4OTg4YzBiLi40NzJhZThiZDBkMTFkOGMx
MmVhOGZkNjQ3NDc2NjgzMTc0ZTcyNzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmgKQEAgLTE1Niw2ICsxNTYsMjYgQEAgSlNfRVhQT1JUIEpTU3RyaW5nUmVmIEpT
R2xvYmFsQ29udGV4dENvcHlOYW1lKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpIEpTQ19BUElfQVYK
ICovCiBKU19FWFBPUlQgdm9pZCBKU0dsb2JhbENvbnRleHRTZXROYW1lKEpTR2xvYmFsQ29udGV4
dFJlZiBjdHgsIEpTU3RyaW5nUmVmIG5hbWUpIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEw
KSwgaW9zKDguMCkpOwogCisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlICJ1bmhh
bmRsZWQgcHJvbWlzZSByZWplY3Rpb24iIGNhbGxiYWNrIGZvciBhIGNvbnRleHQuCitAZGlzY3Vz
c2lvbiBKU0Mtb25seSBhbHRlcm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5o
YW5kbGVkcmVqZWN0aW9uJykuCitAcGFyYW0gY3R4IFRoZSBKU0dsb2JhbENvbnRleHQgdG8gc2V0
IHRoZSBjYWxsYmFjayBvbi4KK0BwYXJhbSBmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gc2V0LCB3aGljaCByZWNlaXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNvbiBh
cyBhcmd1bWVudHMuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBhIEpTVmFsdWVSZWYg
aW4gd2hpY2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3MgTlVMTCBpZiB5b3Ug
ZG8gbm90IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpT
R2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwor
CisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlICJsYXRlLWhhbmRsZWQgcHJvbWlz
ZSByZWplY3Rpb24iIGNhbGxiYWNrIGZvciBhIGNvbnRleHQuCitAZGlzY3Vzc2lvbiBKU0Mtb25s
eSBhbHRlcm5hdGl2ZSB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVqZWN0aW9uaGFuZGxl
ZCcpLgorQHBhcmFtIGN0eCBUaGUgSlNHbG9iYWxDb250ZXh0IHRvIHNldCB0aGUgY2FsbGJhY2sg
b24uCitAcGFyYW0gZnVuY3Rpb24gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCwgd2hpY2gg
cmVjZWl2ZXMgdGhlIHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMgYXJndW1lbnRzLgor
QHBhcmFtIGV4Y2VwdGlvbiBBIHBvaW50ZXIgdG8gYSBKU1ZhbHVlUmVmIGluIHdoaWNoIHRvIHN0
b3JlIGFuIGV4Y2VwdGlvbiwgaWYgYW55LiBQYXNzIE5VTEwgaWYgeW91IGRvIG5vdCBjYXJlIHRv
IHN0b3JlIGFuIGV4Y2VwdGlvbi4KKyovCitKU19FWFBPUlQgdm9pZCBKU0dsb2JhbENvbnRleHRT
ZXRSZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKICNpZmRlZiBfX2NwbHVz
cGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RhcGkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
LmNwcAppbmRleCAxY2ZkNGMwM2EwOGJhZDQyMmU5NDE0MTg4NWJjOTdjMGU4ZDBlYjY2Li5iY2Y5
MjZmNjI5OWYyNmIxZGM0YTJjNTY5ZjFlYTgxZmQ4NGVhYjJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNPYmplY3RSZWZQcml2YXRlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0xMzcsNiArMTM4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc3ltYm9sc0RlbGV0ZVByb3BlcnR5Rm9yS2V5KCk7CiAgICAgdm9pZCBw
cm9taXNlUmVzb2x2ZVRydWUoKTsKICAgICB2b2lkIHByb21pc2VSZWplY3RUcnVlKCk7CisgICAg
dm9pZCBwcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2tzKCk7CiAKICAgICBpbnQgZmFpbGVkKCkgY29u
c3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KIApAQCAtNDU0LDcgKzQ1Niw3IEBAIHZvaWQgVGVzdEFQ
STo6cHJvbWlzZVJlc29sdmVUcnVlKCkKIAogICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIHRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgcmVzb2x2ZSwgcmVzb2x2ZSwgMSwgJnRydWVWYWx1ZSwgJmV4Y2VwdGlvbik7Ci0gICAg
Y2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmUg
cHJvbWlzZSIpOworICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJl
IHRocm93biByZXNvbHZpbmcgcHJvbWlzZSIpOwogICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQs
ICJ0aGVuIHJlc3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOwogfQog
CkBAIC00NzksNyArNDgxLDcgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSgpCiAK
ICAgICBBUElTdHJpbmcgY2F0Y2hTdHJpbmcoImNhdGNoIik7CiAgICAgSlNWYWx1ZVJlZiBjYXRj
aEZ1bmN0aW9uID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBwcm9taXNlLCBjYXRjaFN0
cmluZywgJmV4Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYXRjaEZ1bmN0aW9u
ICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYXRjaEZ1bmN0aW9uKSwgIlByb21pc2Ugc2hv
dWxkIGhhdmUgYSB0aGVuIG9iamVjdCBwcm9wZXJ0eSIpOworICAgIGNoZWNrKCFleGNlcHRpb24g
JiYgY2F0Y2hGdW5jdGlvbiAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2F0Y2hGdW5jdGlv
biksICJQcm9taXNlIHNob3VsZCBoYXZlIGEgY2F0Y2ggb2JqZWN0IHByb3BlcnR5Iik7CiAKICAg
ICBKU1ZhbHVlUmVmIHBhc3NlZFRydWVGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0
aENhbGxiYWNrKGNvbnRleHQsIHRydWVTdHJpbmcsIHBhc3NlZFRydWUpOwogICAgIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oY2F0Y2hGdW5j
dGlvbiksIHByb21pc2UsIDEsICZwYXNzZWRUcnVlRnVuY3Rpb24sICZleGNlcHRpb24pOwpAQCAt
NDg3LDggKzQ4OSw0NyBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZWplY3RUcnVlKCkKIAogICAg
IGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRydWUpOwogICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEsICZ0cnVl
VmFsdWUsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24g
c2hvdWxkIGJlIHRocm93biByZXNvbHZlIHByb21pc2UiKTsKLSAgICBjaGVjayhwYXNzZWRUcnVl
Q2FsbGVkLCAidGhlbiByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4i
KTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24g
cmVqZWN0aW5nIHByb21pc2UiKTsKKyAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAiY2F0Y2gg
cmVzcG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7Cit9CisKK3ZvaWQg
VGVzdEFQSTo6cHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrcygpCit7CisgICAgSlNPYmplY3RSZWYg
cmVqZWN0OworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBzdGF0aWMg
YXV0byBwcm9taXNlID0gSlNPYmplY3RNYWtlRGVmZXJyZWRQcm9taXNlKGNvbnRleHQsIG51bGxw
dHIsICZyZWplY3QsICZleGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJjcmVhdGlu
ZyBhIChyZWplY3Qtb25seSkgZGVmZXJyZWQgcHJvbWlzZSBzaG91bGQgbm90IHRocm93Iik7Cisg
ICAgc3RhdGljIGF1dG8gcmVhc29uID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgQVBJU3Ry
aW5nKCJyZWFzb24iKSk7CisKKyAgICBzdGF0aWMgVGVzdEFQSSogdGVzdGVyID0gdGhpczsKKyAg
ICBzdGF0aWMgYXV0byBjYWxsYmFja0NhbGxDb3VudCA9IDA7CisKKyAgICBhdXRvIGNhbGxiYWNr
ID0gW10oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiop
IC0+IEpTVmFsdWVSZWYgeworICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291bnQgJiYg
SlNWYWx1ZUlzU3RyaWN0RXF1YWwoY3R4LCBhcmd1bWVudHNbMF0sIHByb21pc2UpLCAiY2FsbGJh
Y2sgc2hvdWxkIHJlY2VpdmUgcmVqZWN0ZWQgcHJvbWlzZSBhcyBmaXJzdCBhcmd1bWVudCIpOwor
ICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291bnQgPiAxICYmIEpTVmFsdWVJc1N0cmlj
dEVxdWFsKGN0eCwgYXJndW1lbnRzWzFdLCByZWFzb24pLCAiY2FsbGJhY2sgc2hvdWxkIHJlY2Vp
dmUgcmVqZWN0aW9uIHJlYXNvbiBhcyBzZWNvbmQgYXJndW1lbnQiKTsKKyAgICAgICAgdGVzdGVy
LT5jaGVjayhhcmd1bWVudENvdW50ID09IDIsICJjYWxsYmFjayBzaG91bGQgbm90IHJlY2VpdmUg
YSB0aGlyZCBhcmd1bWVudCIpOworICAgICAgICBjYWxsYmFja0NhbGxDb3VudCsrOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICB9OworICAgIGF1dG8gY2Fs
bGJhY2tGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQs
IEFQSVN0cmluZygiY2FsbGJhY2siKSwgY2FsbGJhY2spOworCisgICAgSlNHbG9iYWxDb250ZXh0
U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soY29udGV4dCwgY2FsbGJhY2tGdW5jdGlvbiwg
JmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgInNldHRpbmcgdW5oYW5kbGVkIHJl
amVjdGlvbiBjYWxsYmFjayBzaG91bGQgbm90IHRocm93Iik7CisKKyAgICBKU09iamVjdENhbGxB
c0Z1bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCAmcmVhc29uLCAmZXhjZXB0aW9u
KTsKKyAgICBjaGVjayghZXhjZXB0aW9uICYmIGNhbGxiYWNrQ2FsbENvdW50ID09IDEsICJ1bmhh
bmRsZWQgcmVqZWN0aW9uIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgdXBvbiB1bmhhbmRsZWQg
cmVqZWN0aW9uIik7CisKKyAgICBhdXRvIG5vb3BGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0
aW9uKGNvbnRleHQsIEFQSVN0cmluZygibm9vcCIpLCAwLCBudWxscHRyLCBBUElTdHJpbmcoIiIp
LCBudWxscHRyLCAxLCAmZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAiY3JlYXRp
bmcgYSBuby1vcCBmdW5jdGlvbiBzaG91bGQgbm90IHRocm93Iik7CisKKyAgICBKU0dsb2JhbENv
bnRleHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhjb250ZXh0LCBub29wRnVuY3Rpb24s
ICZleGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJyZXNldHRpbmcgdW5oYW5kbGVk
IHJlamVjdGlvbiBjYWxsYmFjayBzaG91bGQgbm90IHRocm93Iik7CisgICAgSlNHbG9iYWxDb250
ZXh0U2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrRnVuY3Rpb24s
ICZleGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJzZXR0aW5nIHJlamVjdGlvbiBo
YW5kbGVkIGNhbGxiYWNrIHNob3VsZCBub3QgdGhyb3ciKTsKKworICAgIGF1dG8gY2F0Y2hGdW5j
dGlvbiA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcHJvbWlzZSwgQVBJU3RyaW5nKCJj
YXRjaCIpLCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQs
IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhdGNoRnVuY3Rpb24pLCBwcm9taXNlLCAxLCAmbm9v
cEZ1bmN0aW9uLCAmZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uICYmIGNhbGxiYWNr
Q2FsbENvdW50ID09IDIsICJyZWplY3Rpb24gaGFuZGxlZCBjYWxsYmFjayBzaG91bGQgYmUgY2Fs
bGVkIHVwb24gbGF0ZS1oYW5kbGVkIHJlamVjdGlvbiIpOwogfQogCiAjZGVmaW5lIFJVTih0ZXN0
KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTIxLDYgKzU2Miw3
IEBAIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHN5bWJv
bHNEZWxldGVQcm9wZXJ0eUZvcktleSgpKTsKICAgICBSVU4ocHJvbWlzZVJlc29sdmVUcnVlKCkp
OwogICAgIFJVTihwcm9taXNlUmVqZWN0VHJ1ZSgpKTsKKyAgICBSVU4ocHJvbWlzZVJlamVjdGlv
bkNhbGxiYWNrcygpKTsKIAogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0
YUxvZ0xuKCJGaWx0ZXJlZCBhbGwgdGVzdHM6IEVSUk9SIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmlu
ZGV4IGM2ODE3ZTA0NWY1NjdlOWVkM2EwZTU5NTdkMjVlNjM3OTg1NjVmYWUuLmNkOWI2N2FlZTU1
N2NjOTU2YjkyNDAyYmY3Mzc4OTViYWZiMzg2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0z
ODQsNiArMzg0LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25EaXNhYmxlUmljaFNvdXJjZUluZm8oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1hbGxvY0luQUxvb3AoRXhlY1N0YXRlKik7CiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUo
RXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFJlamVjdGlvbkhhbmRsZWRDYWxs
YmFjayhFeGVjU3RhdGUqKTsKKwogc3RydWN0IFNjcmlwdCB7CiAgICAgZW51bSBjbGFzcyBTdHJp
Y3RNb2RlIHsKICAgICAgICAgU3RyaWN0LApAQCAtNjM4LDYgKzY0MSw5IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJkaXNhYmxlUmljaFNvdXJjZUluZm8iLCBmdW5jdGlv
bkRpc2FibGVSaWNoU291cmNlSW5mbywgMCk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibWFs
bG9jSW5BTG9vcCIsIGZ1bmN0aW9uTWFsbG9jSW5BTG9vcCwgMCk7CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAidG90YWxDb21waWxlVGltZSIsIGZ1bmN0aW9uVG90YWxDb21waWxlVGltZSwgMCk7
CisKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFj
ayIsIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2ssIDEpOworICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgInNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayIsIGZ1bmN0aW9uU2V0
UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrLCAxKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRG
dW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCkBAIC0yMzg0LDYgKzIzOTAs
MzIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XZWJBc3Nl
bWJseU1lbW9yeU1vZGUoRXhlY1N0YXRlKiBleGUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmpl
Y3QoKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOworCisgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwgb2JqZWN0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5p
c0Z1bmN0aW9uKHZtKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOworCisgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zZXRSZWplY3Rpb25IYW5k
bGVkQ2FsbGJhY2sodm0sIG9iamVjdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBn
ZXQgcmlkIG9mIHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0
ZXN0cyBmYWlsIGluIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAv
LyBiZSBpbiBhIHNlcGFyYXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5j
dGlvbiByZXF1aXJlcyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCmluZGV4IDA0N2MxNjY1M2U3MWIxYTgwNmJkOWZjN2Q1NjY0M2E1Zjk4
OGYxMWUuLjMwN2NjNDVkYTEzYTIwMWQzNGY1NmQzYzgxYmFjZWExOTY4MDgyN2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDI1LDYg
KzQyNSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBtX25hbWU7CiAKKyAgICBTdHJvbmc8SlNP
YmplY3Q+IG1fdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2s7CisgICAgU3Ryb25nPEpTT2JqZWN0
PiBtX3JlamVjdGlvbkhhbmRsZWRDYWxsYmFjazsKKwogICAgIERlYnVnZ2VyKiBtX2RlYnVnZ2Vy
OwogCiAgICAgVk0mIG1fdm07CkBAIC04MDQsNiArODA3LDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAKKyAgICB2b2lkIHNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrKFZNJiB2bSwgSlNPYmplY3QqIGZ1bmN0aW9uKSB7IG1fdW5oYW5kbGVkUmVqZWN0aW9uQ2Fs
bGJhY2suc2V0KHZtLCBmdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogdW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFJlamVjdGlvbkhhbmRsZWRDYWxsYmFjayhWTSYgdm0s
IEpTT2JqZWN0KiBmdW5jdGlvbikgeyBtX3JlamVjdGlvbkhhbmRsZWRDYWxsYmFjay5zZXQodm0s
IGZ1bmN0aW9uKTsgfQorICAgIEpTT2JqZWN0KiByZWplY3Rpb25IYW5kbGVkQ2FsbGJhY2soKSBj
b25zdCB7IHJldHVybiBtX3JlamVjdGlvbkhhbmRsZWRDYWxsYmFjay5nZXQoKTsgfQorCiAgICAg
SlNPYmplY3QqIGFycmF5QnVmZmVyQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
QnVmZmVyU3RydWN0dXJlLmNvbnN0cnVjdG9yKHRoaXMpOyB9CiAKICAgICBKU09iamVjdCogYXJy
YXlCdWZmZXJQcm90b3R5cGUoQXJyYXlCdWZmZXJTaGFyaW5nTW9kZSBzaGFyaW5nTW9kZSkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAppbmRleCAwODExNGNhNjk2MDZiMGMzMjYzOWMxNDFlZThmODZm
ZjQzNWVhYTA0Li42OTVkNmRhNWJiOTYzMjcxNGZlODcwZTk1MDUwYTliOGVjYzYxZjg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwCkBAIC03NjYsMTAgKzc2NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIoRXhlY1N0YXRl
KiBleAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpCisgICAgSlNQcm9t
aXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJvbWlzZSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKKwor
ICAgIC8vIEludGVybmFsUHJvbWlzZXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHVzZXIgc2Ny
aXB0cy4KKyAgICBpZiAocHJvbWlzZS0+aW5oZXJpdHM8SlNJbnRlcm5hbFByb21pc2U+KHZtKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIEpT
UHJvbWlzZSogcHJvbWlzZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihleGVjLT5hcmd1bWVudCgwKSk7
CiAgICAgSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAgICAg
QVNTRVJUKG9wZXJhdGlvblZhbHVlLmlzTnVtYmVyKCkpOwpAQCAtNzc3LDcgKzc3OSwxOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlv
blRyYWNrZXIoRXhlY1N0YXRlKiBleAogICAgIEFTU0VSVChvcGVyYXRpb24gPT0gSlNQcm9taXNl
UmVqZWN0aW9uT3BlcmF0aW9uOjpSZWplY3QgfHwgb3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVj
dGlvbk9wZXJhdGlvbjo6SGFuZGxlKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
Ci0gICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVq
ZWN0aW9uVHJhY2tlcihnbG9iYWxPYmplY3QsIGV4ZWMsIHByb21pc2UsIG9wZXJhdGlvbik7Cisg
ICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJl
amVjdGlvblRyYWNrZXIpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBleGVjLCBwcm9t
aXNlLCBvcGVyYXRpb24pOworICAgIGVsc2UgeworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbikg
eworICAgICAgICBjYXNlIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0OgorICAg
ICAgICAgICAgdm0ucHJvbWlzZVJlamVjdGVkKHByb21pc2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGU6CisgICAg
ICAgICAgICB2bS5wcm9taXNlSGFuZGxlZChwcm9taXNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDRlMmQwZDMyNGEyNGUyMzJjZDE5NTM4OTJlZDhiMGEz
M2IwYjA1ZWUuLjJkNzQzZWFjZmNiZjhhYjA1MmI5ODkxYzQzODE4NWY1YTlhNWMzZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTMxNyw2ICszMTcsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3R5cGVQcm9maWxlckVu
YWJsZWRDb3VudCgwKQogICAgICwgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoSXNXYXRjaGVk
KQogICAgICwgbV9jb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZENvdW50KDApCisgICAgLCBtX291
dHN0YW5kaW5nUmVqZWN0ZWRQcm9taXNlcygqdGhpcykKIHsKICAgICBpZiAoVU5MSUtFTFkodm1D
cmVhdGlvblNob3VsZENyYXNoKSkKICAgICAgICAgQ1JBU0hfV0lUSF9JTkZPKDB4NDI0MjQyNDIy
MDIwMjAyMCwgMHhiYWRiZWVmMGJhZGJlZWYsIDB4MTIzNDEyMzQxMjM0MTIzNCwgMHgxMzM3MTMz
NzEzMzcxMzM3KTsKQEAgLTEwOTAsMTMgKzEwOTEsNzMgQEAgdm9pZCBWTTo6cXVldWVNaWNyb3Rh
c2soSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPE1pY3JvdGFzaz4mJiB0YXNrKQog
ICAgIG1fbWljcm90YXNrUXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UXVldWVkVGFzaz4o
KnRoaXMsICZnbG9iYWxPYmplY3QsIFdURk1vdmUodGFzaykpKTsKIH0KIAotdm9pZCBWTTo6ZHJh
aW5NaWNyb3Rhc2tzKCkKK3ZvaWQgVk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2soSlNQ
cm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3Ryb25nPEpTUHJvbWlzZT4mIHBy
b21pc2UpCit7CisgICAgSlNPYmplY3QqIGNhbGxiYWNrID0gb3BlcmF0aW9uID09IEpTUHJvbWlz
ZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0CisgICAgICAgID8gcHJvbWlzZS0+Z2xvYmFsT2Jq
ZWN0KCktPnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCkKKyAgICAgICAgOiBwcm9taXNlLT5n
bG9iYWxPYmplY3QoKS0+cmVqZWN0aW9uSGFuZGxlZENhbGxiYWNrKCk7CisKKyAgICBpZiAoIWNh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSgqdGhpcyk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGdldENhbGxEYXRhKCp0aGlzLCBjYWxsYmFjaywgY2FsbERhdGEpOworICAgIEFT
U0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHByb21pc2UuZ2V0KCkpOworICAgIGFyZ3MuYXBw
ZW5kKHByb21pc2UtPnJlc3VsdCgqdGhpcykpOworICAgIGNhbGwocHJvbWlzZS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxs
KCksIGFyZ3MpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgVk06OmRp
ZEV4aGF1c3RNaWNyb3Rhc2tRdWV1ZSgpCiB7Ci0gICAgd2hpbGUgKCFtX21pY3JvdGFza1F1ZXVl
LmlzRW1wdHkoKSkgewotICAgICAgICBtX21pY3JvdGFza1F1ZXVlLnRha2VGaXJzdCgpLT5ydW4o
KTsKLSAgICAgICAgaWYgKG1fb25FYWNoTWljcm90YXNrVGljaykKLSAgICAgICAgICAgIG1fb25F
YWNoTWljcm90YXNrVGljaygqdGhpcyk7CisgICAgYXV0byBsYXRlSGFuZGxlZFJlamVjdGlvbnMg
PSBXVEZNb3ZlKG1fbGF0ZUhhbmRsZWRSZWplY3RlZFByb21pc2VzKTsKKyAgICBmb3IgKGF1dG8m
IHByb21pc2UgOiBsYXRlSGFuZGxlZFJlamVjdGlvbnMpCisgICAgICAgIGNhbGxQcm9taXNlUmVq
ZWN0aW9uQ2FsbGJhY2soSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGUsIHByb21p
c2UpOworCisgICAgYXV0byB1bmhhbmRsZWRSZWplY3Rpb25zID0gV1RGTW92ZShtX2Fib3V0VG9C
ZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcyk7CisgICAgZm9yIChhdXRvJiBwcm9taXNlIDogdW5o
YW5kbGVkUmVqZWN0aW9ucykgeworICAgICAgICBpZiAocHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlz
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9u
Q2FsbGJhY2soSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpSZWplY3QsIHByb21pc2UpOwor
CisgICAgICAgIGlmICghcHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAgICAgICAgICAgIG1f
b3V0c3RhbmRpbmdSZWplY3RlZFByb21pc2VzLnNldChwcm9taXNlLmdldCgpLCBwcm9taXNlLmdl
dCgpKTsKICAgICB9Cit9CisKK3ZvaWQgVk06OnByb21pc2VSZWplY3RlZChKU1Byb21pc2UqIHBy
b21pc2UpCit7CisgICAgbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuY29uc3Ry
dWN0QW5kQXBwZW5kKCp0aGlzLCBwcm9taXNlKTsKK30KKwordm9pZCBWTTo6cHJvbWlzZUhhbmRs
ZWQoSlNQcm9taXNlKiBwcm9taXNlKQoreworICAgIGJvb2wgd2FzTm90UmVwb3J0ZWQgPSBtX2Fi
b3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcy5yZW1vdmVGaXJzdE1hdGNoaW5nKFtwcm9t
aXNlXSAoU3Ryb25nPEpTUHJvbWlzZT4mIHVuaGFuZGxlZFByb21pc2UpIHsKKyAgICAgICAgcmV0
dXJuIHVuaGFuZGxlZFByb21pc2UuZ2V0KCkgPT0gcHJvbWlzZTsKKyAgICB9KTsKKworICAgIGlm
ICh3YXNOb3RSZXBvcnRlZCB8fCAhbV9vdXRzdGFuZGluZ1JlamVjdGVkUHJvbWlzZXMucmVtb3Zl
KHByb21pc2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhdGVIYW5kbGVkUmVqZWN0ZWRQ
cm9taXNlcy5jb25zdHJ1Y3RBbmRBcHBlbmQoKnRoaXMsIHByb21pc2UpOworfQorCit2b2lkIFZN
OjpkcmFpbk1pY3JvdGFza3MoKQoreworICAgIGRvIHsKKyAgICAgICAgd2hpbGUgKCFtX21pY3Jv
dGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9taWNyb3Rhc2tRdWV1ZS50YWtl
Rmlyc3QoKS0+cnVuKCk7CisgICAgICAgICAgICBpZiAobV9vbkVhY2hNaWNyb3Rhc2tUaWNrKQor
ICAgICAgICAgICAgICAgIG1fb25FYWNoTWljcm90YXNrVGljaygqdGhpcyk7CisgICAgICAgIH0K
KyAgICAgICAgZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKCk7CisgICAgfSB3aGlsZSAoIW1fbWlj
cm90YXNrUXVldWUuaXNFbXB0eSgpKTsKICAgICBmaW5hbGl6ZVN5bmNocm9ub3VzSlNFeGVjdXRp
b24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggZTUwZjgxOWUxODk4
MzYyZTY4ODQ0YjY1M2MxY2FkMzcyYmU3MjZhYi4uZDFlNWZhYmQxNGI3MzlmZmEzN2I0MGI0YmIx
NjcyMmE5M2ZjNTZjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMjMsNiAr
MTIzLDcgQEAgY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKIGNsYXNzIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFz
cyBKU09iamVjdDsKK2NsYXNzIEpTUHJvbWlzZTsKIGNsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjsKIGNsYXNzIEpTUnVuTG9vcFRpbWVyOwogY2xhc3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGU7
CkBAIC0xNzMsNiArMTc0LDggQEAgbmFtZXNwYWNlIERPTUpJVCB7CiBjbGFzcyBTaWduYXR1cmU7
CiB9CiAKK2VudW0gY2xhc3MgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uIDogdW5zaWduZWQ7
CisKIHN0cnVjdCBFbnRyeUZyYW1lOwogc3RydWN0IEhhc2hUYWJsZTsKIHN0cnVjdCBJbnN0cnVj
dGlvbjsKQEAgLTkyMiw2ICs5MjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlOZWVkVGVy
bWluYXRpb24oKSB7IG1fdHJhcHMuZmlyZVRyYXAoVk1UcmFwczo6TmVlZFRlcm1pbmF0aW9uKTsg
fQogICAgIHZvaWQgbm90aWZ5TmVlZFdhdGNoZG9nQ2hlY2soKSB7IG1fdHJhcHMuZmlyZVRyYXAo
Vk1UcmFwczo6TmVlZFdhdGNoZG9nQ2hlY2spOyB9CiAKKyAgICB2b2lkIHByb21pc2VSZWplY3Rl
ZChKU1Byb21pc2UqKTsKKyAgICB2b2lkIHByb21pc2VIYW5kbGVkKEpTUHJvbWlzZSopOworCiAj
aWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAgICAgU3RhY2tUcmFjZSog
bmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVTdGFj
a1RyYWNlT2ZMYXN0VGhyb3cuZ2V0KCk7IH0KICAgICBUaHJlYWQqIHRocm93aW5nVGhyZWFkKCkg
Y29uc3QgeyByZXR1cm4gbV90aHJvd2luZ1RocmVhZC5nZXQoKTsgfQpAQCAtMTAwOCw2ICsxMDE0
LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVk
Q2FsbGJhY2sodm9pZCopOwogICAgIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwog
CisgICAgdm9pZCBjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKEpTUHJvbWlzZVJlamVjdGlv
bk9wZXJhdGlvbiwgU3Ryb25nPEpTUHJvbWlzZT4mKTsKKyAgICB2b2lkIGRpZEV4aGF1c3RNaWNy
b3Rhc2tRdWV1ZSgpOworCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgY29uc3QgQ2xh
c3NJbmZvKiBtX2luaXRpYWxpemluZ09iamVjdENsYXNzOwogI2VuZGlmCkBAIC0xMDYzLDYgKzEw
NzIsMTAgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93Q2hpY2tlbj4gbV9z
aGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUludHJpbnNpY1JlZ2lz
dHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICBWZWN0b3I8U3Ryb25nPEpT
UHJvbWlzZT4+IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzOworICAgIFZlY3Rv
cjxTdHJvbmc8SlNQcm9taXNlPj4gbV9sYXRlSGFuZGxlZFJlamVjdGVkUHJvbWlzZXM7CisgICAg
V2Vha0dDTWFwPEpTUHJvbWlzZSosIEpTUHJvbWlzZT4gbV9vdXRzdGFuZGluZ1JlamVjdGVkUHJv
bWlzZXM7CisKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoVk0mKT4gbV9vbkVhY2hNaWNyb3Rhc2tU
aWNrOwogICAgIHVpbnRwdHJfdCBtX2N1cnJlbnRXZWFrUmVmVmVyc2lvbiB7IDAgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4
IDc4OGUyZTY3N2Y3ZjIwY2QzOWQyMTcxMmNmODY3NDYwYjU2ZjViNGIuLjgwMzBkMzU0MGY1YjE0
NjQ5NGM1MDZiYmJjZmI4ZTI0MzJhZjE3ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTIxNiwxNiArMjE2LDExIEBAIHZvaWQg
SlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTR2xvYmFsT2JqZWN0
KiBqc0dsb2JhbE9iamVjdCwKIHsKICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWhvc3Rwcm9taXNlcmVqZWN0aW9udHJhY2tl
ci1pbXBsZW1lbnRhdGlvbgogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvJiBn
bG9iYWxPYmplY3QgPSAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihqc0dsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogY29udGV4dCA9IGdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJ
bnRlcm5hbFByb21pc2VzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCi0g
ICAgaWYgKEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTSW50ZXJuYWxQcm9taXNlKj4odm0sIHBy
b21pc2UpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBGSVhNRTogSWYgc2NyaXB0IGhhcyBt
dXRlZCBlcnJvcnMgKGNyb3NzIG9yaWdpbiksIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy4KICAgICAv
LyA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTcxNDE1PiBJbXBsZW1lbnQgdGhlIGBtdXRlZC1lcnJv
cnNgIHByb3BlcnR5IG9mIFNjcmlwdHMgdG8gYXZvaWQgb25lcnJvci9vbnVuaGFuZGxlZHJlamVj
dGlvbiBmb3IgY3Jvc3Mtb3JpZ2luIHNjcmlwdHMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376833</attachid>
            <date>2019-08-20 17:44:15 -0700</date>
            <delta_ts>2019-08-21 15:25:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197172-20190820174414.patch</filename>
            <type>text/plain</type>
            <size>21772</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
Y2QzNmQxZTA0MTExZDJhZTFiNDk2MWQ2YzEwNjc5ODk5YzA4NWQ1Li5jOWNmOTYyMjdjNTczMDhh
MmU1NWQyNWMyYTI5MTIzN2RiYTA4YzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NSBAQAorMjAxOS0wOC0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgcG9zc2libGUgdG8gcmVnaXN0ZXIgYSB1
bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gY2FsbGJhY2sgdmlhIEpTQydzIHB1YmxpYyBBUEku
CisgICAgICAgIFNpbmNlIHRoZXJlIGlzIG5vIGV2ZW50IGxvb3AgaW4gc3VjaCBhbiBlbnZpcm9u
bWVudCwgdGhpcyBjYWxsYmFjayBmaXJlcyBvZmYgb2YgdGhlIG1pY3JvdGFzayBxdWV1ZS4KKyAg
ICAgICAgVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVh
c29uIGFzIGFyZ3VtZW50cyBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgorCisgICAg
ICAgICogQVBJL0pTQ29udGV4dC5oOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAg
ICAgICgtW0pTQ29udGV4dCBzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjazpdKTogQWRkZWQu
CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChKU0dsb2JhbENvbnRl
eHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRSZWYuaDoKKyAgICAgICAgQWRkIG5ldyBwdWJsaWMgQVBJIGNhbGwgKGZvciBDKysg
YW5kIE9iakMgYWxpa2UpLgorCisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOgorICAg
ICAgICAoVGVzdEFQSTo6cHJvbWlzZVJlc29sdmVUcnVlKTogQ2xlYW4gdXAgdGVzdCBvdXRwdXQu
CisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSk6IENsZWFuIHVwIHRlc3Qgb3V0
cHV0LgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlzZVVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
KTogQWRkZWQuCisgICAgICAgICh0ZXN0Q0FQSVZpYUNwcCk6CisgICAgICAgIEFkZCBuZXcgQysr
IEFQSSB0ZXN0LgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25D
YWxsYmFjayk6IEFkZGVkLgorICAgICAgICBBZGQgY29ycmVzcG9uZGluZyBnbG9iYWwgdG8gSlND
IHNoZWxsLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrIGNvbnN0KTogQWRkZWQuCisgICAgICAgIEtlZXAgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRo
ZSBjYWxsYmFjay4KKworICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2Vy
KToKKyAgICAgICAgQWRkIGRlZmF1bHQgYmVoYXZpb3IuCisKKyAgICAgICAgKiBydW50aW1lL1ZN
LmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2spOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmRpZEV4aGF1c3RNaWNyb3Rhc2tRdWV1ZSk6IEFkZGVk
LgorICAgICAgICAoSlNDOjpWTTo6cHJvbWlzZVJlamVjdGVkKTogQWRkZWQuCisgICAgICAgIChK
U0M6OlZNOjpkcmFpbk1pY3JvdGFza3MpOgorICAgICAgICBXaGVuIG1pY3JvdGFzayBxdWV1ZSBp
cyBleGhhdXN0ZWQsIGRlYWwgd2l0aCBhbnkgcGVuZGluZyB1bmhhbmRsZWQgcmVqZWN0aW9ucwor
ICAgICAgICAoaW4gYSBtYW5uZXIgYmFzZWQgb24gUmVqZWN0ZWRQcm9taXNlVHJhY2tlcidzIHJl
cG9ydFVuaGFuZGxlZFJlamVjdGlvbnMpLAorICAgICAgICB0aGVuIG1ha2Ugc3VyZSB0aGlzIGRp
ZG4ndCBjYXVzZSBhbnkgbmV3IG1pY3JvdGFza3MgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLgor
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICBTdG9yZSB1bmhhbmRsZWQgcmVqZWN0
aW9ucy4gKFRoaXMgY29sbGVjdGlvbiB3aWxsIGFsd2F5cyBiZSBlbXB0eSBpbiB0aGUgcHJlc2Vu
Y2Ugb2YgV2ViQ29yZS4pCisKIDIwMTktMDgtMjAgIEp1c3RpbiBNaWNoYXVkICA8anVzdGluX21p
Y2hhdWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXQVNNLVJlZmVyZW5jZXNdIEVuYWJsZSBieSBk
ZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ5ZWY5ZjVmYzUyNTk5YWRiYjJiNTU1YmQ2ZGQ0Njg4Mjk2
MjY3Ni4uOTMzODFhYjBiNGZjOWQyMWNmMTMxM2QwNTQyYWE5NWJjYzI3MjYwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA4LTIwICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJz
bGluZ0Bzb255LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgcHVibGljIEFQSSBmb3Ig
dW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlvblRy
YWNrZXIpOgorICAgICAgICBNb3ZlIEpTSW50ZXJuYWxQcm9taXNlIGVhcmx5LW91dCB0byBKU0Mg
c2lkZS4KKwogMjAxOS0wOC0yMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbV0hMU0xdIFdlIG5lZWQgdG8gbnVsbCBjaGVjayB3aGVuIGVtaXR0aW5nIG5hdGl2
ZSBjb2RlIGZvciBvcGVyYXRvciYuPGZpZWxkLW5hbWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHQuaAppbmRleCA2YjljNWQ0MTc2MTkzNmQwNjZlNjk2ZDYxYzAzODk0ODg2MGQ2ZTZi
Li4zMWM0MWYzNWUzYWFmMGUzMmViYmRiZWY0YjhhYTcxM2ZjMDBjMTIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKQEAgLTE3Nyw2ICsxNzcsMTUgQEAgSlNDX0NMQVNTX0FW
QUlMQUJMRShtYWNvcygxMC45KSwgaW9zKDcuMCkpCiBAZGlzY3Vzc2lvbiBOYW1lIG9mIHRoZSBK
U0NvbnRleHQuIEV4cG9zZWQgd2hlbiByZW1vdGUgZGVidWdnaW5nIHRoZSBjb250ZXh0LgogKi8K
IEBwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKm5hbWUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTApLCBpb3MoOC4wKSk7CisKKy8qIQorQG1ldGhvZAorQGFic3RyYWN0IFNldHMgdGhlIHVu
aGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiBjYWxsYmFjayBmb3IgYSBKU0NvbnRleHQuCitAZGlz
Y3Vzc2lvbiBTaW1pbGFyIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWpl
Y3Rpb24nKSwgYnV0IGZvciBhIHN0YW5kYWxvbmUgSlNDb250ZXh0LgorQHBhcmFtIGZ1bmN0aW9u
IFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9taXNl
IGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KKyovCistICh2b2lkKXNldFVuaGFu
ZGxlZFJlamVjdGlvbkNhbGxiYWNrOihKU1ZhbHVlICopZnVuY3Rpb247CisKIEBlbmQKIAogLyoh
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCmluZGV4IDA1ZGU0ZjM0NmQxOTVh
NWNlODk2MzI4YmFhMGI2MzMyNjc0YmViZGUuLmU4YjRjZmVjZjA2ZTlkYTdkZWRhZjIyNTU3MjFm
M2YwODkwMTUyYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC0y
NjAsNiArMjYwLDE5IEBAIC0gKHZvaWQpc2V0TmFtZTooTlNTdHJpbmcgKiluYW1lCiAgICAgSlNH
bG9iYWxDb250ZXh0U2V0TmFtZShtX2NvbnRleHQsIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUo
bmFtZSkuZ2V0KCkpOwogfQogCistICh2b2lkKXNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
OihKU1ZhbHVlICopZnVuY3Rpb24KK3sKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxw
dHI7CisKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbk9iamVjdCA9IEpTVmFsdWVUb09iamVjdCht
X2NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1ZShmdW5jdGlvbiksICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgIFtzZWxmIG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2sobV9j
b250ZXh0LCBmdW5jdGlvbk9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikK
KyAgICAgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07Cit9CisKIC0gKEJPT0wp
X3JlbW90ZUluc3BlY3Rpb25FbmFibGVkCiB7CiAgICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dEdl
dFJlbW90ZUluc3BlY3Rpb25FbmFibGVkKG1fY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKaW5kZXggNzcxYmY1MmVkY2YyOGMzYjE0NWQzZjVkY2Fm
MjAxMTA3NDA1YjEwNy4uMjkxYWZhODMzZGMxZDViNjI2YmJlNTNhNjViMDRiMzZkMjU3ZWVkNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJlZkludGVybmFsLmgiCiAKICNpbmNsdWRlICJB
UElDYXN0LmgiCisjaW5jbHVkZSAiQVBJVXRpbHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNBUElHbG9iYWxP
YmplY3QuaCIKQEAgLTM3LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNs
dWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgpAQCAtMjUyLDYgKzI1NCwyNSBAQCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldE5hbWUoSlNHbG9i
YWxDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSkKICAgICB2bS52bUVudHJ5R2xvYmFs
T2JqZWN0KGV4ZWMpLT5zZXROYW1lKG5hbWUgPyBuYW1lLT5zdHJpbmcoKSA6IFN0cmluZygpKTsK
IH0KIAordm9pZCBKU0dsb2JhbENvbnRleHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhK
U0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmICghY3R4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cih2bSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhmdW5jdGlvbik7CisgICAgaWYg
KCFvYmplY3QtPmlzRnVuY3Rpb24odm0pKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihj
cmVhdGVUeXBlRXJyb3IoZXhlYykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm0u
dm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2so
dm0sIG9iamVjdCk7Cit9CiAKIGNsYXNzIEJhY2t0cmFjZUZ1bmN0b3IgewogcHVibGljOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgKaW5kZXggMWNlNzQzNTgwNGViYjli
YzQ3ZjdjMWYwZDllOTRmYzA3ODk4OGMwYi4uNWQ3NDc5N2JmZjM4ZmJmYjVjNTZhZDZkMGIzNDkz
ODk5ZmQwZTEwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5oCkBA
IC0xNTYsNiArMTU2LDE2IEBAIEpTX0VYUE9SVCBKU1N0cmluZ1JlZiBKU0dsb2JhbENvbnRleHRD
b3B5TmFtZShKU0dsb2JhbENvbnRleHRSZWYgY3R4KSBKU0NfQVBJX0FWCiAqLwogSlNfRVhQT1JU
IHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0TmFtZShKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU1N0
cmluZ1JlZiBuYW1lKSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKTsK
IAorLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCBTZXRzIHRoZSB1bmhhbmRsZWQgcHJvbWlzZSBy
ZWplY3Rpb24gY2FsbGJhY2sgZm9yIGEgY29udGV4dC4KK0BkaXNjdXNzaW9uIEpTQy1vbmx5IGFs
dGVybmF0aXZlIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24n
KS4KK0BwYXJhbSBjdHggVGhlIEpTR2xvYmFsQ29udGV4dCB0byBzZXQgdGhlIGNhbGxiYWNrIG9u
LgorQHBhcmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJl
Y2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KK0Bw
YXJhbSBleGNlcHRpb24gQSBwb2ludGVyIHRvIGEgSlNWYWx1ZVJlZiBpbiB3aGljaCB0byBzdG9y
ZSBhbiBleGNlcHRpb24sIGlmIGFueS4gUGFzcyBOVUxMIGlmIHlvdSBkbyBub3QgY2FyZSB0byBz
dG9yZSBhbiBleGNlcHRpb24uCisqLworSlNfRVhQT1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0
VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKICNpZmRlZiBfX2NwbHVz
cGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RhcGkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
LmNwcAppbmRleCAxY2ZkNGMwM2EwOGJhZDQyMmU5NDE0MTg4NWJjOTdjMGU4ZDBlYjY2Li4xMmFm
ODk5MzZiYjAwNzE1NGQ0Y2I0ZTc4NjU5OWIxNmNhNzJmOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNPYmplY3RSZWZQcml2YXRlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0xMzcsNiArMTM4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc3ltYm9sc0RlbGV0ZVByb3BlcnR5Rm9yS2V5KCk7CiAgICAgdm9pZCBw
cm9taXNlUmVzb2x2ZVRydWUoKTsKICAgICB2b2lkIHByb21pc2VSZWplY3RUcnVlKCk7CisgICAg
dm9pZCBwcm9taXNlVW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKTsKIAogICAgIGludCBmYWls
ZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQogCkBAIC00NTQsNyArNDU2LDcgQEAgdm9p
ZCBUZXN0QVBJOjpwcm9taXNlUmVzb2x2ZVRydWUoKQogCiAgICAgYXV0byB0cnVlVmFsdWUgPSBK
U1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdHJ1ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0LCByZXNvbHZlLCByZXNvbHZlLCAxLCAmdHJ1ZVZhbHVlLCAmZXhjZXB0aW9u
KTsKLSAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24g
cmVzb2x2ZSBwcm9taXNlIik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBz
aG91bGQgYmUgdGhyb3duIHJlc29sdmluZyBwcm9taXNlIik7CiAgICAgY2hlY2socGFzc2VkVHJ1
ZUNhbGxlZCwgInRoZW4gcmVzcG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQu
Iik7CiB9CiAKQEAgLTQ3OSw3ICs0ODEsNyBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZWplY3RU
cnVlKCkKIAogICAgIEFQSVN0cmluZyBjYXRjaFN0cmluZygiY2F0Y2giKTsKICAgICBKU1ZhbHVl
UmVmIGNhdGNoRnVuY3Rpb24gPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHByb21pc2Us
IGNhdGNoU3RyaW5nLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhjZXB0aW9uICYmIGNhdGNo
RnVuY3Rpb24gJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhdGNoRnVuY3Rpb24pLCAiUHJv
bWlzZSBzaG91bGQgaGF2ZSBhIHRoZW4gb2JqZWN0IHByb3BlcnR5Iik7CisgICAgY2hlY2soIWV4
Y2VwdGlvbiAmJiBjYXRjaEZ1bmN0aW9uICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYXRj
aEZ1bmN0aW9uKSwgIlByb21pc2Ugc2hvdWxkIGhhdmUgYSBjYXRjaCBvYmplY3QgcHJvcGVydHki
KTsKIAogICAgIEpTVmFsdWVSZWYgcGFzc2VkVHJ1ZUZ1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVu
Y3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgdHJ1ZVN0cmluZywgcGFzc2VkVHJ1ZSk7CiAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihj
YXRjaEZ1bmN0aW9uKSwgcHJvbWlzZSwgMSwgJnBhc3NlZFRydWVGdW5jdGlvbiwgJmV4Y2VwdGlv
bik7CkBAIC00ODcsOCArNDg5LDM1IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlamVjdFRydWUo
KQogCiAgICAgYXV0byB0cnVlVmFsdWUgPSBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdHJ1
ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZWplY3QsIHJlamVjdCwg
MSwgJnRydWVWYWx1ZSwgJmV4Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiwgIk5vIGV4
Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmUgcHJvbWlzZSIpOwotICAgIGNoZWNrKHBh
c3NlZFRydWVDYWxsZWQsICJ0aGVuIHJlc3BvbnNlIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4g
Y2FsbGVkLiIpOworICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJl
IHRocm93biByZWplY3RpbmcgcHJvbWlzZSIpOworICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQs
ICJjYXRjaCByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKK30K
Kwordm9pZCBUZXN0QVBJOjpwcm9taXNlVW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKQorewor
ICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxw
dHI7CisgICAgc3RhdGljIGF1dG8gcHJvbWlzZSA9IEpTT2JqZWN0TWFrZURlZmVycmVkUHJvbWlz
ZShjb250ZXh0LCBudWxscHRyLCAmcmVqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhj
ZXB0aW9uLCAiY3JlYXRpbmcgYSAocmVqZWN0LW9ubHkpIGRlZmVycmVkIHByb21pc2Ugc2hvdWxk
IG5vdCB0aHJvdyIpOworICAgIHN0YXRpYyBhdXRvIHJlYXNvbiA9IEpTVmFsdWVNYWtlU3RyaW5n
KGNvbnRleHQsIEFQSVN0cmluZygicmVhc29uIikpOworCisgICAgc3RhdGljIFRlc3RBUEkqIHRl
c3RlciA9IHRoaXM7CisgICAgc3RhdGljIGJvb2wgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKKwor
ICAgIGF1dG8gY2FsbGJhY2sgPSBbXShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKikgLT4gSlNWYWx1ZVJlZiB7CisgICAgICAgIHRlc3Rlci0+Y2hlY2so
YXJndW1lbnRDb3VudCAmJiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChjdHgsIGFyZ3VtZW50c1swXSwg
cHJvbWlzZSksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2ZSByZWplY3RlZCBwcm9taXNlIGFzIGZp
cnN0IGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+Y2hlY2soYXJndW1lbnRDb3VudCA+IDEg
JiYgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY3R4LCBhcmd1bWVudHNbMV0sIHJlYXNvbiksICJjYWxs
YmFjayBzaG91bGQgcmVjZWl2ZSByZWplY3Rpb24gcmVhc29uIGFzIHNlY29uZCBhcmd1bWVudCIp
OworICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291bnQgPT0gMiwgImNhbGxiYWNrIHNo
b3VsZCBub3QgcmVjZWl2ZSBhIHRoaXJkIGFyZ3VtZW50Iik7CisgICAgICAgIGNhbGxiYWNrQ2Fs
bGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cisg
ICAgfTsKKyAgICBhdXRvIGNhbGxiYWNrRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldp
dGhDYWxsYmFjayhjb250ZXh0LCBBUElTdHJpbmcoImNhbGxiYWNrIiksIGNhbGxiYWNrKTsKKwor
ICAgIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKGNvbnRleHQs
IGNhbGxiYWNrRnVuY3Rpb24sICZleGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJz
ZXR0aW5nIHVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCB0aHJvdyIpOwor
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZWplY3QsIHJlamVjdCwgMSwg
JnJlYXNvbiwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYWxsYmFja0Nh
bGxlZCwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCB1cG9u
IHVuaGFuZGxlZCByZWplY3Rpb24iKTsKIH0KIAogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUyMSw2ICs1NTAsNyBAQCBpbnQgdGVz
dENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTihzeW1ib2xzRGVsZXRlUHJv
cGVydHlGb3JLZXkoKSk7CiAgICAgUlVOKHByb21pc2VSZXNvbHZlVHJ1ZSgpKTsKICAgICBSVU4o
cHJvbWlzZVJlamVjdFRydWUoKSk7CisgICAgUlVOKHByb21pc2VVbmhhbmRsZWRSZWplY3Rpb25D
YWxsYmFjaygpKTsKIAogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YUxv
Z0xuKCJGaWx0ZXJlZCBhbGwgdGVzdHM6IEVSUk9SIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4
IDg1ZWI0ZDliOTg2YzI5ZTFhMWIxMGQyZWQzZDkyZTAwMThlY2EwZjQuLmMwYzFjMTM5NGEwNjc1
NDdiNzdjY2NjZmYzMmFjZWUzNDQ2Y2IwMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0zODQs
NiArMzg0LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25E
aXNhYmxlUmljaFNvdXJjZUluZm8oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1hbGxvY0luQUxvb3AoRXhlY1N0YXRlKik7CiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUoRXhl
Y1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soRXhlY1N0YXRlKik7CisKIHN0cnVjdCBTY3Jp
cHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0TW9kZSB7CiAgICAgICAgIFN0cmljdCwKQEAgLTYz
OCw2ICs2NDAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZGlzYWJs
ZVJpY2hTb3VyY2VJbmZvIiwgZnVuY3Rpb25EaXNhYmxlUmljaFNvdXJjZUluZm8sIDApOwogICAg
ICAgICBhZGRGdW5jdGlvbih2bSwgIm1hbGxvY0luQUxvb3AiLCBmdW5jdGlvbk1hbGxvY0luQUxv
b3AsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInRvdGFsQ29tcGlsZVRpbWUiLCBmdW5j
dGlvblRvdGFsQ29tcGlsZVRpbWUsIDApOworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0
VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2siLCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrLCAxKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYgdm0s
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCkBAIC0yMzg0LDYgKzIzODgsMTkgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XZWJBc3NlbWJseU1lbW9yeU1vZGUo
RXhlY1N0YXRlKiBleGUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIW9iamVjdCB8fCAh
b2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOworCisgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zZXRVbmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwgb2JqZWN0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiAvLyBVc2UgU0VIIGZvciBSZWxlYXNlIGJ1aWxk
cyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFsb2cKIC8vIChsdWNraWx5
IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNvIGZhciku
IE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBq
c2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggZjUwYWZhNmE2N2NiNjZlZWE1NjdlMjkz
ZWM0YjZlMjY0MWY5N2E5NS4uYzEyYTY1MmNhZTExMTgyZDc0MGM4NjFhYmIzYjFiMjY1Yjk0MGNk
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CkBAIC00MjUsNiArNDI1LDggQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG1fbmFtZTsKIAorICAg
IFN0cm9uZzxKU09iamVjdD4gbV91bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjazsKKwogICAgIERl
YnVnZ2VyKiBtX2RlYnVnZ2VyOwogCiAgICAgVk0mIG1fdm07CkBAIC04MDcsNiArODA5LDkgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAorICAgIHZvaWQgc2V0VW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2soVk0mIHZtLCBKU09iamVjdCogZnVuY3Rpb24pIHsgbV91bmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjay5zZXQodm0sIGZ1bmN0aW9uKTsgfQorICAgIEpTT2JqZWN0
KiB1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fdW5oYW5kbGVk
UmVqZWN0aW9uQ2FsbGJhY2suZ2V0KCk7IH0KKwogICAgIEpTT2JqZWN0KiBhcnJheUJ1ZmZlckNv
bnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5jb25zdHJ1
Y3Rvcih0aGlzKTsgfQogCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVyUHJvdG90eXBlKEFycmF5
QnVmZmVyU2hhcmluZ01vZGUgc2hhcmluZ01vZGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKaW5k
ZXggMDgxMTRjYTY5NjA2YjBjMzI2MzljMTQxZWU4Zjg2ZmY0MzVlYWEwNC4uYjA3YTAyZTY4NDg3
MWJkYjBjMDY1NTM4ZThjNDkwOTRhZDE1ZGU0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApAQCAtNzY2
LDEwICs3NjYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9z
dFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgaWYgKCFnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnBy
b21pc2VSZWplY3Rpb25UcmFja2VyKQorICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzQ2FzdDxK
U1Byb21pc2UqPihleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICAvLyBJbnRlcm5hbFByb21pc2Vz
IHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCisgICAgaWYgKHByb21pc2Ut
PmluaGVyaXRzPEpTSW50ZXJuYWxQcm9taXNlPih2bSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nh
c3Q8SlNQcm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIEpTVmFsdWUgb3BlcmF0aW9u
VmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIEFTU0VSVChvcGVyYXRpb25WYWx1ZS5p
c051bWJlcigpKTsKQEAgLTc3Nyw3ICs3NzksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgK
ICAgICBBU1NFUlQob3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVq
ZWN0IHx8IG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZSk7
CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2Jq
ZWN0LCBleGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAgIGlmIChnbG9iYWxPYmplY3QtPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKQorICAgICAg
ICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rp
b25UcmFja2VyKGdsb2JhbE9iamVjdCwgZXhlYywgcHJvbWlzZSwgb3BlcmF0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAgY2FzZSBKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdDoKKyAgICAgICAgICAgIHZtLnByb21pc2VSZWpl
Y3RlZChwcm9taXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTUHJvbWlz
ZVJlamVjdGlvbk9wZXJhdGlvbjo6SGFuZGxlOgorICAgICAgICAgICAgLy8gZG8gbm90aGluZwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggYjcwOTJjMDhlZjcy
YjBlY2E4OWZmMGI1YzRiZTFhZTU5YWExZGJiNS4uZWI1ZDk0OTc0ODMyMWQzZmMzNGFjZTU4NjQ5
MThkM2RmMTY2NTlhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTA5
MCwxMyArMTA5MCw1MSBAQCB2b2lkIFZNOjpxdWV1ZU1pY3JvdGFzayhKU0dsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBSZWY8TWljcm90YXNrPiYmIHRhc2spCiAgICAgbV9taWNyb3Rhc2tRdWV1
ZS5hcHBlbmQobWFrZVVuaXF1ZTxRdWV1ZWRUYXNrPigqdGhpcywgJmdsb2JhbE9iamVjdCwgV1RG
TW92ZSh0YXNrKSkpOwogfQogCi12b2lkIFZNOjpkcmFpbk1pY3JvdGFza3MoKQordm9pZCBWTTo6
Y2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhTdHJvbmc8SlNQcm9taXNlPiYgcHJvbWlzZSkK
IHsKLSAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
bWljcm90YXNrUXVldWUudGFrZUZpcnN0KCktPnJ1bigpOwotICAgICAgICBpZiAobV9vbkVhY2hN
aWNyb3Rhc2tUaWNrKQotICAgICAgICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNrKCp0aGlzKTsK
KyAgICBKU09iamVjdCogY2FsbGJhY2sgPSBwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+dW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2soKTsKKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgqdGhpcyk7CisKKyAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KCp0aGlzLCBjYWxsYmFjaywgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3Mu
YXBwZW5kKHByb21pc2UuZ2V0KCkpOworICAgIGFyZ3MuYXBwZW5kKHByb21pc2UtPnJlc3VsdCgq
dGhpcykpOworICAgIGNhbGwocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwg
Y2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxsKCksIGFyZ3MpOworICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgVk06OmRpZEV4aGF1c3RNaWNyb3Rhc2tRdWV1
ZSgpCit7CisgICAgYXV0byB1bmhhbmRsZWRSZWplY3Rpb25zID0gV1RGTW92ZShtX2Fib3V0VG9C
ZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcyk7CisgICAgZm9yIChhdXRvJiBwcm9taXNlIDogdW5o
YW5kbGVkUmVqZWN0aW9ucykgeworICAgICAgICBpZiAocHJvbWlzZS0+aXNIYW5kbGVkKCp0aGlz
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhbGxQcm9taXNlUmVqZWN0aW9u
Q2FsbGJhY2socHJvbWlzZSk7CiAgICAgfQorfQorCit2b2lkIFZNOjpwcm9taXNlUmVqZWN0ZWQo
SlNQcm9taXNlKiBwcm9taXNlKQoreworICAgIG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFBy
b21pc2VzLmNvbnN0cnVjdEFuZEFwcGVuZCgqdGhpcywgcHJvbWlzZSk7Cit9CisKK3ZvaWQgVk06
OmRyYWluTWljcm90YXNrcygpCit7CisgICAgZG8geworICAgICAgICB3aGlsZSAoIW1fbWljcm90
YXNrUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX21pY3JvdGFza1F1ZXVlLnRha2VG
aXJzdCgpLT5ydW4oKTsKKyAgICAgICAgICAgIGlmIChtX29uRWFjaE1pY3JvdGFza1RpY2spCisg
ICAgICAgICAgICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNrKCp0aGlzKTsKKyAgICAgICAgfQor
ICAgICAgICBkaWRFeGhhdXN0TWljcm90YXNrUXVldWUoKTsKKyAgICB9IHdoaWxlICghbV9taWNy
b3Rhc2tRdWV1ZS5pc0VtcHR5KCkpOwogICAgIGZpbmFsaXplU3luY2hyb25vdXNKU0V4ZWN1dGlv
bigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBlNTBmODE5ZTE4OTgz
NjJlNjg4NDRiNjUzYzFjYWQzNzJiZTcyNmFiLi40MzQ5YWIxN2UwMDhkNzJhOTY4NGM1ZTAzYzgy
YjY5YmRmOTM2MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEyMyw2ICsx
MjMsNyBAQCBjbGFzcyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOwogY2xhc3MgSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNz
IEpTT2JqZWN0OworY2xhc3MgSlNQcm9taXNlOwogY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOwogY2xhc3MgSlNSdW5Mb29wVGltZXI7CiBjbGFzcyBKU1N0cmluZ0hlYXBDZWxsVHlwZTsK
QEAgLTkyMiw2ICs5MjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlOZWVkVGVybWluYXRp
b24oKSB7IG1fdHJhcHMuZmlyZVRyYXAoVk1UcmFwczo6TmVlZFRlcm1pbmF0aW9uKTsgfQogICAg
IHZvaWQgbm90aWZ5TmVlZFdhdGNoZG9nQ2hlY2soKSB7IG1fdHJhcHMuZmlyZVRyYXAoVk1UcmFw
czo6TmVlZFdhdGNoZG9nQ2hlY2spOyB9CiAKKyAgICB2b2lkIHByb21pc2VSZWplY3RlZChKU1By
b21pc2UqKTsKKwogI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogICAg
IFN0YWNrVHJhY2UqIG5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RUaHJvdygpIGNvbnN0IHsgcmV0dXJu
IG1fbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93LmdldCgpOyB9CiAgICAgVGhyZWFkKiB0aHJv
d2luZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyb3dpbmdUaHJlYWQuZ2V0KCk7IH0KQEAg
LTEwMDgsNiArMTAxMSw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcHJpbWl0aXZlR2ln
YWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKICAgICB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdl
RGlzYWJsZWQoKTsKIAorICAgIHZvaWQgY2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhTdHJv
bmc8SlNQcm9taXNlPiYpOworICAgIHZvaWQgZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKCk7CisK
ICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICBjb25zdCBDbGFzc0luZm8qIG1faW5pdGlh
bGl6aW5nT2JqZWN0Q2xhc3M7CiAjZW5kaWYKQEAgLTEwNjMsNiArMTA2OSw4IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0NoaWNrZW4+IG1fc2hhZG93Q2hpY2tlbjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeT4gbV9ieXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5OwogCisgICAgVmVjdG9yPFN0cm9uZzxKU1Byb21pc2U+PiBtX2Fib3V0
VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlczsKKwogICAgIFdURjo6RnVuY3Rpb248dm9pZChW
TSYpPiBtX29uRWFjaE1pY3JvdGFza1RpY2s7CiAgICAgdWludHB0cl90IG1fY3VycmVudFdlYWtS
ZWZWZXJzaW9uIHsgMCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKaW5kZXggNzg4ZTJlNjc3ZjdmMjBjZDM5ZDIxNzEyY2Y4Njc0NjBi
NTZmNWI0Yi4uODAzMGQzNTQwZjViMTQ2NDk0YzUwNmJiYmNmYjhlMjQzMmFmMTdlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAt
MjE2LDE2ICsyMTYsMTEgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlv
blRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LAogewogICAgIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9z
dHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0aW9uCiAKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpKU0M6OmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGpzR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiBjb250ZXh0ID0gZ2xvYmFs
T2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIC8vIEludGVybmFsUHJvbWlzZXMgc2hvdWxkIG5vdCBiZSBleHBv
c2VkIHRvIHVzZXIgc2NyaXB0cy4KLSAgICBpZiAoSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNJ
bnRlcm5hbFByb21pc2UqPih2bSwgcHJvbWlzZSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8v
IEZJWE1FOiBJZiBzY3JpcHQgaGFzIG11dGVkIGVycm9ycyAoY3Jvc3Mgb3JpZ2luKSwgdGVybWlu
YXRlIHRoZXNlIHN0ZXBzLgogICAgIC8vIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzE0MTU+IElt
cGxlbWVudCB0aGUgYG11dGVkLWVycm9yc2AgcHJvcGVydHkgb2YgU2NyaXB0cyB0byBhdm9pZCBv
bmVycm9yL29udW5oYW5kbGVkcmVqZWN0aW9uIGZvciBjcm9zcy1vcmlnaW4gc2NyaXB0cwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376931</attachid>
            <date>2019-08-21 15:25:32 -0700</date>
            <delta_ts>2019-08-21 16:36:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197172-20190821152531.patch</filename>
            <type>text/plain</type>
            <size>21964</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2QyNjZhNDFkOTg0NDcyNTBhYWVjMTEwZjZiM2I4YzYxN2U2Yzg3Li5kMGNlMzE0YTEyZDhkZmUw
OWRjMzYyMTFhNGQwZGQ2YWEzODNkNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NSBAQAorMjAxOS0wOC0yMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgcG9zc2libGUgdG8gcmVnaXN0ZXIgYSB1
bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gY2FsbGJhY2sgdmlhIEpTQydzIHB1YmxpYyBBUEku
CisgICAgICAgIFNpbmNlIHRoZXJlIGlzIG5vIGV2ZW50IGxvb3AgaW4gc3VjaCBhbiBlbnZpcm9u
bWVudCwgdGhpcyBjYWxsYmFjayBmaXJlcyBvZmYgb2YgdGhlIG1pY3JvdGFzayBxdWV1ZS4KKyAg
ICAgICAgVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVh
c29uIGFzIGFyZ3VtZW50cyBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgorCisgICAg
ICAgICogQVBJL0pTQ29udGV4dC5oOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAg
ICAgICgtW0pTQ29udGV4dCBzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjazpdKTogQWRkZWQu
CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChKU0dsb2JhbENvbnRl
eHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRSZWYuaDoKKyAgICAgICAgQWRkIG5ldyBwdWJsaWMgQVBJIGNhbGwgKGZvciBDKysg
YW5kIE9iakMgYWxpa2UpLgorCisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOgorICAg
ICAgICAoVGVzdEFQSTo6cHJvbWlzZVJlc29sdmVUcnVlKTogQ2xlYW4gdXAgdGVzdCBvdXRwdXQu
CisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSk6IENsZWFuIHVwIHRlc3Qgb3V0
cHV0LgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlzZVVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
KTogQWRkZWQuCisgICAgICAgICh0ZXN0Q0FQSVZpYUNwcCk6CisgICAgICAgIEFkZCBuZXcgQysr
IEFQSSB0ZXN0LgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25D
YWxsYmFjayk6IEFkZGVkLgorICAgICAgICBBZGQgY29ycmVzcG9uZGluZyBnbG9iYWwgdG8gSlND
IHNoZWxsLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrIGNvbnN0KTogQWRkZWQuCisgICAgICAgIEtlZXAgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRo
ZSBjYWxsYmFjay4KKworICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2Vy
KToKKyAgICAgICAgQWRkIGRlZmF1bHQgYmVoYXZpb3IuCisKKyAgICAgICAgKiBydW50aW1lL1ZN
LmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2spOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmRpZEV4aGF1c3RNaWNyb3Rhc2tRdWV1ZSk6IEFkZGVk
LgorICAgICAgICAoSlNDOjpWTTo6cHJvbWlzZVJlamVjdGVkKTogQWRkZWQuCisgICAgICAgIChK
U0M6OlZNOjpkcmFpbk1pY3JvdGFza3MpOgorICAgICAgICBXaGVuIG1pY3JvdGFzayBxdWV1ZSBp
cyBleGhhdXN0ZWQsIGRlYWwgd2l0aCBhbnkgcGVuZGluZyB1bmhhbmRsZWQgcmVqZWN0aW9ucwor
ICAgICAgICAoaW4gYSBtYW5uZXIgYmFzZWQgb24gUmVqZWN0ZWRQcm9taXNlVHJhY2tlcidzIHJl
cG9ydFVuaGFuZGxlZFJlamVjdGlvbnMpLAorICAgICAgICB0aGVuIG1ha2Ugc3VyZSB0aGlzIGRp
ZG4ndCBjYXVzZSBhbnkgbmV3IG1pY3JvdGFza3MgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLgor
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICBTdG9yZSB1bmhhbmRsZWQgcmVqZWN0
aW9ucy4gKFRoaXMgY29sbGVjdGlvbiB3aWxsIGFsd2F5cyBiZSBlbXB0eSBpbiB0aGUgcHJlc2Vu
Y2Ugb2YgV2ViQ29yZS4pCisKIDIwMTktMDgtMjEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gaW5jb3JyZW50IEpJVCBsZWFkIHRvIFN0YWNrT3Zl
cmZsb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkOTkxMzBhMTgyYzcxYWNhNDIwNDFmZjMxYzViMmU5NjZkMDBm
ODU2Li5lZDcxNTgwMDcyOGEwMjllMWFlMzI5MWEwZTk0YTg1OTM5NzUzOGVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMjEgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNs
aW5nQHNvbnkuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBwdWJsaWMgQVBJIGZvciB1
bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJh
Y2tlcik6CisgICAgICAgIE1vdmUgSlNJbnRlcm5hbFByb21pc2UgZWFybHktb3V0IHRvIEpTQyBz
aWRlLgorCiAyMDE5LTA4LTIxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdIEhMUyBzdHJlYW1zIGRpc2FwcGVhciBmcm9tIE5vdyBQbGF5aW5nIHdoZW4g
cGF1c2VkIG9uIHRoZSBsb2NrIHNjcmVlbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
LmgKaW5kZXggNmI5YzVkNDE3NjE5MzZkMDY2ZTY5NmQ2MWMwMzg5NDg4NjBkNmU2Yi4uZjJhOWQ0
YWM3OTFlZmI2MzM0NWQwOTBmODJlYzgxNzc0MGM3Mzc3MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dC5oCkBAIC0xNzcsNiArMTc3LDE1IEBAIEpTQ19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoMTAuOSksIGlvcyg3LjApKQogQGRpc2N1c3Npb24gTmFtZSBvZiB0aGUgSlNDb250ZXh0
LiBFeHBvc2VkIHdoZW4gcmVtb3RlIGRlYnVnZ2luZyB0aGUgY29udGV4dC4KICovCiBAcHJvcGVy
dHkgKGNvcHkpIE5TU3RyaW5nICpuYW1lIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEwKSwg
aW9zKDguMCkpOworCisvKiEKK0BtZXRob2QKK0BhYnN0cmFjdCBTZXRzIHRoZSB1bmhhbmRsZWQg
cHJvbWlzZSByZWplY3Rpb24gY2FsbGJhY2sgZm9yIGEgSlNDb250ZXh0LgorQGRpc2N1c3Npb24g
U2ltaWxhciB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJyks
IGJ1dCBmb3IgSlNDb250ZXh0cyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgV0tXZWJWaWV3LgorQHBh
cmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVz
IHRoZSBwcm9taXNlIGFuZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KKyovCistICh2
b2lkKXNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrOihKU1ZhbHVlICopZnVuY3Rpb24gSlND
X0FQSV9BVkFJTEFCTEUobWFjb3MoSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsKKwog
QGVuZAogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KaW5kZXggMDVk
ZTRmMzQ2ZDE5NWE1Y2U4OTYzMjhiYWEwYjYzMzI2NzRiZWJkZS4uMWJkNGQwZTg3NjNmNmU3ZTk4
MDk5Y2FlNTA5N2Y5MWU5OTM0ODMzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHQubW0KQEAgLTI2MCw2ICsyNjAsMjEgQEAgLSAodm9pZClzZXROYW1lOihOU1N0cmluZyAqKW5h
bWUKICAgICBKU0dsb2JhbENvbnRleHRTZXROYW1lKG1fY29udGV4dCwgT3BhcXVlSlNTdHJpbmc6
OnRyeUNyZWF0ZShuYW1lKS5nZXQoKSk7CiB9CiAKKy0gKHZvaWQpc2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2s6KEpTVmFsdWUgKilmdW5jdGlvbgoreworICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uID0gbnVsbHB0cjsKKworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uT2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KG1fY29udGV4dCwgdmFsdWVJbnRlcm5hbFZhbHVlKGZ1bmN0aW9uKSwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICBbc2VsZiBub3RpZnlFeGNlcHRp
b246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTR2xvYmFsQ29u
dGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKG1fY29udGV4dCwgZnVuY3Rpb25PYmpl
Y3QsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtzZWxmIG5vdGlm
eUV4Y2VwdGlvbjpleGNlcHRpb25dOworfQorCiAtIChCT09MKV9yZW1vdGVJbnNwZWN0aW9uRW5h
YmxlZAogewogICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRHZXRSZW1vdGVJbnNwZWN0aW9uRW5h
YmxlZChtX2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHRSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYu
Y3BwCmluZGV4IDc3MWJmNTJlZGNmMjhjM2IxNDVkM2Y1ZGNhZjIwMTEwNzQwNWIxMDcuLjI5MWFm
YTgzM2RjMWQ1YjYyNmJiZTUzYTY1YjA0YjM2ZDI1N2VlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJK
U0NvbnRleHRSZWZJbnRlcm5hbC5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IkFQSVV0aWxzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCkBAIC0zNyw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVy
LmgiCiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5o
IgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI1Miw2ICsyNTQsMjUg
QEAgdm9pZCBKU0dsb2JhbENvbnRleHRTZXROYW1lKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpT
U3RyaW5nUmVmIG5hbWUpCiAgICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0TmFt
ZShuYW1lID8gbmFtZS0+c3RyaW5nKCkgOiBTdHJpbmcoKSk7CiB9CiAKK3ZvaWQgSlNHbG9iYWxD
b250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBp
ZiAoIWN0eCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRvSlMoZnVuY3Rpb24pOworICAgIGlmICghb2JqZWN0LT5pc0Z1bmN0aW9u
KHZtKSkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoY3JlYXRlVHlwZUVycm9yKGV4ZWMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3Qo
ZXhlYyktPnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKHZtLCBvYmplY3QpOworfQogCiBj
bGFzcyBCYWNrdHJhY2VGdW5jdG9yIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5oCmluZGV4IDFjZTc0MzU4MDRlYmI5YmM0N2Y3YzFmMGQ5ZTk0ZmMwNzg5
ODhjMGIuLmU5OGIwOWFiNDdmZTBjNDA5NjIzMmE1NDk4ZDk5MWFjYWEzOTFhNTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuaApAQCAtMTU2LDYgKzE1NiwxNiBAQCBK
U19FWFBPUlQgSlNTdHJpbmdSZWYgSlNHbG9iYWxDb250ZXh0Q29weU5hbWUoSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCkgSlNDX0FQSV9BVgogKi8KIEpTX0VYUE9SVCB2b2lkIEpTR2xvYmFsQ29udGV4
dFNldE5hbWUoSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSkgSlNDX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSk7CiAKKy8qIQorQGZ1bmN0aW9uCitA
YWJzdHJhY3QgU2V0cyB0aGUgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGNhbGxiYWNrIGZv
ciBhIGNvbnRleHQuCitAZGlzY3Vzc2lvbiBTaW1pbGFyIHRvIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nKSwgYnV0IGZvciBjb250ZXh0cyBub3QgYXNzb2NpYXRl
ZCB3aXRoIGEgd2ViIHZpZXcuCitAcGFyYW0gY3R4IFRoZSBKU0dsb2JhbENvbnRleHQgdG8gc2V0
IHRoZSBjYWxsYmFjayBvbi4KK0BwYXJhbSBmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gc2V0LCB3aGljaCByZWNlaXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNvbiBh
cyBhcmd1bWVudHMuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBhIEpTVmFsdWVSZWYg
aW4gd2hpY2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3MgTlVMTCBpZiB5b3Ug
ZG8gbm90IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpT
R2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIEpT
Q19BUElfQVZBSUxBQkxFKG1hY29zKEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CisK
ICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLmNwcAppbmRleCAxY2ZkNGMwM2EwOGJhZDQyMmU5NDE0MTg4NWJjOTdj
MGU4ZDBlYjY2Li4xMmFmODk5MzZiYjAwNzE1NGQ0Y2I0ZTc4NjU5OWIxNmNhNzJmOWI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2VQcml2YXRlLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWZQcml2YXRlLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0xMzcs
NiArMTM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3ltYm9sc0RlbGV0ZVByb3BlcnR5Rm9yS2V5
KCk7CiAgICAgdm9pZCBwcm9taXNlUmVzb2x2ZVRydWUoKTsKICAgICB2b2lkIHByb21pc2VSZWpl
Y3RUcnVlKCk7CisgICAgdm9pZCBwcm9taXNlVW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKTsK
IAogICAgIGludCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQogCkBAIC00NTQs
NyArNDU2LDcgQEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVzb2x2ZVRydWUoKQogCiAgICAgYXV0
byB0cnVlVmFsdWUgPSBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdHJ1ZSk7CiAgICAgSlNP
YmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZXNvbHZlLCByZXNvbHZlLCAxLCAmdHJ1ZVZh
bHVlLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNo
b3VsZCBiZSB0aHJvd24gcmVzb2x2ZSBwcm9taXNlIik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwg
Ik5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmluZyBwcm9taXNlIik7CiAgICAg
Y2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgInRoZW4gcmVzcG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhh
dmUgYmVlbiBjYWxsZWQuIik7CiB9CiAKQEAgLTQ3OSw3ICs0ODEsNyBAQCB2b2lkIFRlc3RBUEk6
OnByb21pc2VSZWplY3RUcnVlKCkKIAogICAgIEFQSVN0cmluZyBjYXRjaFN0cmluZygiY2F0Y2gi
KTsKICAgICBKU1ZhbHVlUmVmIGNhdGNoRnVuY3Rpb24gPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIHByb21pc2UsIGNhdGNoU3RyaW5nLCAmZXhjZXB0aW9uKTsKLSAgICBjaGVjayghZXhj
ZXB0aW9uICYmIGNhdGNoRnVuY3Rpb24gJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhdGNo
RnVuY3Rpb24pLCAiUHJvbWlzZSBzaG91bGQgaGF2ZSBhIHRoZW4gb2JqZWN0IHByb3BlcnR5Iik7
CisgICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYXRjaEZ1bmN0aW9uICYmIEpTVmFsdWVJc09iamVj
dChjb250ZXh0LCBjYXRjaEZ1bmN0aW9uKSwgIlByb21pc2Ugc2hvdWxkIGhhdmUgYSBjYXRjaCBv
YmplY3QgcHJvcGVydHkiKTsKIAogICAgIEpTVmFsdWVSZWYgcGFzc2VkVHJ1ZUZ1bmN0aW9uID0g
SlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgdHJ1ZVN0cmluZywgcGFz
c2VkVHJ1ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0
PEpTT2JqZWN0UmVmPihjYXRjaEZ1bmN0aW9uKSwgcHJvbWlzZSwgMSwgJnBhc3NlZFRydWVGdW5j
dGlvbiwgJmV4Y2VwdGlvbik7CkBAIC00ODcsOCArNDg5LDM1IEBAIHZvaWQgVGVzdEFQSTo6cHJv
bWlzZVJlamVjdFRydWUoKQogCiAgICAgYXV0byB0cnVlVmFsdWUgPSBKU1ZhbHVlTWFrZUJvb2xl
YW4oY29udGV4dCwgdHJ1ZSk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBy
ZWplY3QsIHJlamVjdCwgMSwgJnRydWVWYWx1ZSwgJmV4Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4
Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmUgcHJvbWlzZSIp
OwotICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQsICJ0aGVuIHJlc3BvbnNlIGZ1bmN0aW9uIHNo
b3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOworICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNl
cHRpb24gc2hvdWxkIGJlIHRocm93biByZWplY3RpbmcgcHJvbWlzZSIpOworICAgIGNoZWNrKHBh
c3NlZFRydWVDYWxsZWQsICJjYXRjaCByZXNwb25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVu
IGNhbGxlZC4iKTsKK30KKwordm9pZCBUZXN0QVBJOjpwcm9taXNlVW5oYW5kbGVkUmVqZWN0aW9u
Q2FsbGJhY2soKQoreworICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIGF1dG8gcHJvbWlzZSA9IEpTT2JqZWN0TWFr
ZURlZmVycmVkUHJvbWlzZShjb250ZXh0LCBudWxscHRyLCAmcmVqZWN0LCAmZXhjZXB0aW9uKTsK
KyAgICBjaGVjayghZXhjZXB0aW9uLCAiY3JlYXRpbmcgYSAocmVqZWN0LW9ubHkpIGRlZmVycmVk
IHByb21pc2Ugc2hvdWxkIG5vdCB0aHJvdyIpOworICAgIHN0YXRpYyBhdXRvIHJlYXNvbiA9IEpT
VmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIEFQSVN0cmluZygicmVhc29uIikpOworCisgICAgc3Rh
dGljIFRlc3RBUEkqIHRlc3RlciA9IHRoaXM7CisgICAgc3RhdGljIGJvb2wgY2FsbGJhY2tDYWxs
ZWQgPSBmYWxzZTsKKworICAgIGF1dG8gY2FsbGJhY2sgPSBbXShKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKikgLT4gSlNWYWx1ZVJlZiB7CisgICAgICAg
IHRlc3Rlci0+Y2hlY2soYXJndW1lbnRDb3VudCAmJiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChjdHgs
IGFyZ3VtZW50c1swXSwgcHJvbWlzZSksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2ZSByZWplY3Rl
ZCBwcm9taXNlIGFzIGZpcnN0IGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+Y2hlY2soYXJn
dW1lbnRDb3VudCA+IDEgJiYgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY3R4LCBhcmd1bWVudHNbMV0s
IHJlYXNvbiksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2ZSByZWplY3Rpb24gcmVhc29uIGFzIHNl
Y29uZCBhcmd1bWVudCIpOworICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291bnQgPT0g
MiwgImNhbGxiYWNrIHNob3VsZCBub3QgcmVjZWl2ZSBhIHRoaXJkIGFyZ3VtZW50Iik7CisgICAg
ICAgIGNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7CisgICAgfTsKKyAgICBhdXRvIGNhbGxiYWNrRnVuY3Rpb24gPSBKU09iamVj
dE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBBUElTdHJpbmcoImNhbGxiYWNrIiks
IGNhbGxiYWNrKTsKKworICAgIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrRnVuY3Rpb24sICZleGNlcHRpb24pOworICAgIGNoZWNr
KCFleGNlcHRpb24sICJzZXR0aW5nIHVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxk
IG5vdCB0aHJvdyIpOworCisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZWpl
Y3QsIHJlamVjdCwgMSwgJnJlYXNvbiwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlv
biAmJiBjYWxsYmFja0NhbGxlZCwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxk
IGJlIGNhbGxlZCB1cG9uIHVuaGFuZGxlZCByZWplY3Rpb24iKTsKIH0KIAogI2RlZmluZSBSVU4o
dGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUyMSw2ICs1
NTAsNyBAQCBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTihz
eW1ib2xzRGVsZXRlUHJvcGVydHlGb3JLZXkoKSk7CiAgICAgUlVOKHByb21pc2VSZXNvbHZlVHJ1
ZSgpKTsKICAgICBSVU4ocHJvbWlzZVJlamVjdFRydWUoKSk7CisgICAgUlVOKHByb21pc2VVbmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjaygpKTsKIAogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgZGF0YUxvZ0xuKCJGaWx0ZXJlZCBhbGwgdGVzdHM6IEVSUk9SIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCmluZGV4IDQxYmQ2YzQ5MjI5OTI4YTY2ZmZkNjNmOWNhN2QxNjVlYzM4ZmUyOTku
Ljc0ZGZhNzQ5YWEyOGY3OGY5NmYyNGFiYzk2YmE0MzlhMmFhZTE5ZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EaXNhYmxlUmljaFNvdXJjZUluZm8oRXhlY1N0YXRlKik7CiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1hbGxvY0luQUxvb3AoRXhlY1N0
YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRvdGFs
Q29tcGlsZVRpbWUoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soRXhlY1N0YXRlKik7
CisKIHN0cnVjdCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0TW9kZSB7CiAgICAgICAg
IFN0cmljdCwKQEAgLTYzOCw2ICs2NDAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAiZGlzYWJsZVJpY2hTb3VyY2VJbmZvIiwgZnVuY3Rpb25EaXNhYmxlUmljaFNvdXJj
ZUluZm8sIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm1hbGxvY0luQUxvb3AiLCBmdW5j
dGlvbk1hbGxvY0luQUxvb3AsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInRvdGFsQ29t
cGlsZVRpbWUiLCBmdW5jdGlvblRvdGFsQ29tcGlsZVRpbWUsIDApOworCisgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAic2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2siLCBmdW5jdGlvblNldFVu
aGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLCAxKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRG
dW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCkBAIC0yMzg0LDYgKzIzODgs
MTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XZWJBc3Nl
bWJseU1lbW9yeU1vZGUoRXhlY1N0YXRlKiBleGUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmpl
Y3QoKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5pc0Z1bmN0aW9uKHZtKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOworCisgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwgb2JqZWN0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiAvLyBVc2UgU0VIIGZv
ciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFs
b2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBhbmQgRGVidWcg
YnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlv
biBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggZjUwYWZhNmE2
N2NiNjZlZWE1NjdlMjkzZWM0YjZlMjY0MWY5N2E5NS4uYzEyYTY1MmNhZTExMTgyZDc0MGM4NjFh
YmIzYjFiMjY1Yjk0MGNkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCkBAIC00MjUsNiArNDI1LDggQEAgcHVibGljOgogCiAgICAgU3RyaW5n
IG1fbmFtZTsKIAorICAgIFN0cm9uZzxKU09iamVjdD4gbV91bmhhbmRsZWRSZWplY3Rpb25DYWxs
YmFjazsKKwogICAgIERlYnVnZ2VyKiBtX2RlYnVnZ2VyOwogCiAgICAgVk0mIG1fdm07CkBAIC04
MDcsNiArODA5LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsK
ICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAorICAg
IHZvaWQgc2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soVk0mIHZtLCBKU09iamVjdCogZnVu
Y3Rpb24pIHsgbV91bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjay5zZXQodm0sIGZ1bmN0aW9uKTsg
fQorICAgIEpTT2JqZWN0KiB1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2suZ2V0KCk7IH0KKwogICAgIEpTT2JqZWN0
KiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0
cnVjdHVyZS5jb25zdHJ1Y3Rvcih0aGlzKTsgfQogCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVy
UHJvdG90eXBlKEFycmF5QnVmZmVyU2hhcmluZ01vZGUgc2hhcmluZ01vZGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHAKaW5kZXggMDgxMTRjYTY5NjA2YjBjMzI2MzljMTQxZWU4Zjg2ZmY0MzVlYWEw
NC4uNjRhNWVmNjVhOGZiY2JlNGMyYThiOTc4ODg0NzhlZjJmMWExMGRhZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcApAQCAtNzY2LDEwICs3NjYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKEV4ZWNTdGF0ZSogZXgKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKQorICAgIEpTUHJvbWlzZSogcHJv
bWlzZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICAvLyBJ
bnRlcm5hbFByb21pc2VzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIHNjcmlwdHMuCisg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNJbnRlcm5hbFByb21pc2UqPih2bSwgcHJvbWlzZSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU1By
b21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwog
ICAgIEpTVmFsdWUgb3BlcmF0aW9uVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIEFT
U0VSVChvcGVyYXRpb25WYWx1ZS5pc051bWJlcigpKTsKQEAgLTc3Nyw3ICs3NzksMTggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25U
cmFja2VyKEV4ZWNTdGF0ZSogZXgKICAgICBBU1NFUlQob3BlcmF0aW9uID09IEpTUHJvbWlzZVJl
amVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0IHx8IG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rp
b25PcGVyYXRpb246OkhhbmRsZSk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAot
ICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVj
dGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBleGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAg
IGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWpl
Y3Rpb25UcmFja2VyKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKGdsb2JhbE9iamVjdCwgZXhlYywgcHJvbWlz
ZSwgb3BlcmF0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdDoKKyAgICAg
ICAgICAgIHZtLnByb21pc2VSZWplY3RlZChwcm9taXNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6SGFuZGxlOgorICAgICAg
ICAgICAgLy8gZG8gbm90aGluZworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKaW5kZXggYjcwOTJjMDhlZjcyYjBlY2E4OWZmMGI1YzRiZTFhZTU5YWExZGJiNS4uZWI1ZDk0
OTc0ODMyMWQzZmMzNGFjZTU4NjQ5MThkM2RmMTY2NTlhYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcApAQCAtMTA5MCwxMyArMTA5MCw1MSBAQCB2b2lkIFZNOjpxdWV1ZU1pY3Jv
dGFzayhKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8TWljcm90YXNrPiYmIHRhc2sp
CiAgICAgbV9taWNyb3Rhc2tRdWV1ZS5hcHBlbmQobWFrZVVuaXF1ZTxRdWV1ZWRUYXNrPigqdGhp
cywgJmdsb2JhbE9iamVjdCwgV1RGTW92ZSh0YXNrKSkpOwogfQogCi12b2lkIFZNOjpkcmFpbk1p
Y3JvdGFza3MoKQordm9pZCBWTTo6Y2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhTdHJvbmc8
SlNQcm9taXNlPiYgcHJvbWlzZSkKIHsKLSAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fbWljcm90YXNrUXVldWUudGFrZUZpcnN0KCktPnJ1bigpOwot
ICAgICAgICBpZiAobV9vbkVhY2hNaWNyb3Rhc2tUaWNrKQotICAgICAgICAgICAgbV9vbkVhY2hN
aWNyb3Rhc2tUaWNrKCp0aGlzKTsKKyAgICBKU09iamVjdCogY2FsbGJhY2sgPSBwcm9taXNlLT5n
bG9iYWxPYmplY3QoKS0+dW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKTsKKyAgICBpZiAoIWNh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSgqdGhpcyk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGdldENhbGxEYXRhKCp0aGlzLCBjYWxsYmFjaywgY2FsbERhdGEpOworICAgIEFT
U0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHByb21pc2UuZ2V0KCkpOworICAgIGFyZ3MuYXBw
ZW5kKHByb21pc2UtPnJlc3VsdCgqdGhpcykpOworICAgIGNhbGwocHJvbWlzZS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxs
KCksIGFyZ3MpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgVk06OmRp
ZEV4aGF1c3RNaWNyb3Rhc2tRdWV1ZSgpCit7CisgICAgYXV0byB1bmhhbmRsZWRSZWplY3Rpb25z
ID0gV1RGTW92ZShtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcyk7CisgICAgZm9y
IChhdXRvJiBwcm9taXNlIDogdW5oYW5kbGVkUmVqZWN0aW9ucykgeworICAgICAgICBpZiAocHJv
bWlzZS0+aXNIYW5kbGVkKCp0aGlzKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2socHJvbWlzZSk7CiAgICAgfQorfQorCit2b2lk
IFZNOjpwcm9taXNlUmVqZWN0ZWQoSlNQcm9taXNlKiBwcm9taXNlKQoreworICAgIG1fYWJvdXRU
b0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzLmNvbnN0cnVjdEFuZEFwcGVuZCgqdGhpcywgcHJv
bWlzZSk7Cit9CisKK3ZvaWQgVk06OmRyYWluTWljcm90YXNrcygpCit7CisgICAgZG8geworICAg
ICAgICB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBt
X21pY3JvdGFza1F1ZXVlLnRha2VGaXJzdCgpLT5ydW4oKTsKKyAgICAgICAgICAgIGlmIChtX29u
RWFjaE1pY3JvdGFza1RpY2spCisgICAgICAgICAgICAgICAgbV9vbkVhY2hNaWNyb3Rhc2tUaWNr
KCp0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBkaWRFeGhhdXN0TWljcm90YXNrUXVldWUoKTsK
KyAgICB9IHdoaWxlICghbV9taWNyb3Rhc2tRdWV1ZS5pc0VtcHR5KCkpOwogICAgIGZpbmFsaXpl
U3luY2hyb25vdXNKU0V4ZWN1dGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCBlNTBmODE5ZTE4OTgzNjJlNjg4NDRiNjUzYzFjYWQzNzJiZTcyNmFiLi40MzQ5YWIx
N2UwMDhkNzJhOTY4NGM1ZTAzYzgyYjY5YmRmOTM2MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTEyMyw2ICsxMjMsNyBAQCBjbGFzcyBKU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uOwogY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7CiBjbGFzcyBK
U0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNQcm9taXNlOwogY2xhc3Mg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogY2xhc3MgSlNSdW5Mb29wVGltZXI7CiBjbGFzcyBK
U1N0cmluZ0hlYXBDZWxsVHlwZTsKQEAgLTkyMiw2ICs5MjMsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBub3RpZnlOZWVkVGVybWluYXRpb24oKSB7IG1fdHJhcHMuZmlyZVRyYXAoVk1UcmFwczo6TmVl
ZFRlcm1pbmF0aW9uKTsgfQogICAgIHZvaWQgbm90aWZ5TmVlZFdhdGNoZG9nQ2hlY2soKSB7IG1f
dHJhcHMuZmlyZVRyYXAoVk1UcmFwczo6TmVlZFdhdGNoZG9nQ2hlY2spOyB9CiAKKyAgICB2b2lk
IHByb21pc2VSZWplY3RlZChKU1Byb21pc2UqKTsKKwogI2lmIEVOQUJMRShFWENFUFRJT05fU0NP
UEVfVkVSSUZJQ0FUSU9OKQogICAgIFN0YWNrVHJhY2UqIG5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RU
aHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93LmdldCgp
OyB9CiAgICAgVGhyZWFkKiB0aHJvd2luZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyb3dp
bmdUaHJlYWQuZ2V0KCk7IH0KQEAgLTEwMDgsNiArMTAxMSw5IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKICAgICB2
b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIAorICAgIHZvaWQgY2FsbFByb21pc2VS
ZWplY3Rpb25DYWxsYmFjayhTdHJvbmc8SlNQcm9taXNlPiYpOworICAgIHZvaWQgZGlkRXhoYXVz
dE1pY3JvdGFza1F1ZXVlKCk7CisKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICBjb25z
dCBDbGFzc0luZm8qIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3M7CiAjZW5kaWYKQEAgLTEwNjMs
NiArMTA2OSw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0NoaWNrZW4+
IG1fc2hhZG93Q2hpY2tlbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVJbnRyaW5zaWNS
ZWdpc3RyeT4gbV9ieXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogCisgICAgVmVjdG9yPFN0cm9u
ZzxKU1Byb21pc2U+PiBtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlczsKKwogICAg
IFdURjo6RnVuY3Rpb248dm9pZChWTSYpPiBtX29uRWFjaE1pY3JvdGFza1RpY2s7CiAgICAgdWlu
dHB0cl90IG1fY3VycmVudFdlYWtSZWZWZXJzaW9uIHsgMCB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXggNzg4ZTJlNjc3Zjdm
MjBjZDM5ZDIxNzEyY2Y4Njc0NjBiNTZmNWI0Yi4uODAzMGQzNTQwZjViMTQ2NDk0YzUwNmJiYmNm
YjhlMjQzMmFmMTdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcApAQCAtMjE2LDE2ICsyMTYsMTEgQEAgdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2Jq
ZWN0LAogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dl
YmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWltcGxlbWVudGF0
aW9uCiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9
ICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGpzR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvKiBjb250ZXh0ID0gZ2xvYmFsT2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEludGVybmFsUHJvbWlz
ZXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHVzZXIgc2NyaXB0cy4KLSAgICBpZiAoSlNDOjpq
c0R5bmFtaWNDYXN0PEpTQzo6SlNJbnRlcm5hbFByb21pc2UqPih2bSwgcHJvbWlzZSkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHQgaGFzIG11dGVkIGVycm9ycyAo
Y3Jvc3Mgb3JpZ2luKSwgdGVybWluYXRlIHRoZXNlIHN0ZXBzLgogICAgIC8vIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xNzE0MTU+IEltcGxlbWVudCB0aGUgYG11dGVkLWVycm9yc2AgcHJvcGVydHkg
b2YgU2NyaXB0cyB0byBhdm9pZCBvbmVycm9yL29udW5oYW5kbGVkcmVqZWN0aW9uIGZvciBjcm9z
cy1vcmlnaW4gc2NyaXB0cwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376949</attachid>
            <date>2019-08-21 16:36:41 -0700</date>
            <delta_ts>2019-08-23 11:19:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197172-20190821163640.patch</filename>
            <type>text/plain</type>
            <size>19986</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2QyNjZhNDFkOTg0NDcyNTBhYWVjMTEwZjZiM2I4YzYxN2U2Yzg3Li5jYjNjZWI2YjgyOWQyOWIx
Njg2MWFlZmVmNWVjYjNhOTM1Zjg0YTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxOS0wOC0yMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgcG9zc2libGUgdG8gcmVnaXN0ZXIgYSB1
bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gY2FsbGJhY2sgdmlhIHRoZSBKU0MgQVBJLgorICAg
ICAgICBTaW5jZSB0aGVyZSBpcyBubyBldmVudCBsb29wIGluIHN1Y2ggYW4gZW52aXJvbm1lbnQs
IHRoaXMgY2FsbGJhY2sgZmlyZXMgb2ZmIG9mIHRoZSBtaWNyb3Rhc2sgcXVldWUuCisgICAgICAg
IFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgcHJvbWlzZSBhbmQgcmVqZWN0aW9uIHJlYXNvbiBh
cyBhcmd1bWVudHMgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KKworICAgICAgICAq
IEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVm
UHJpdmF0ZS5oOgorICAgICAgICBBZGQgbmV3IEMrKyBBUEkgY2FsbC4KKworICAgICAgICAqIEFQ
SS90ZXN0cy90ZXN0YXBpLmNwcDoKKyAgICAgICAgKFRlc3RBUEk6OnByb21pc2VSZXNvbHZlVHJ1
ZSk6IENsZWFuIHVwIHRlc3Qgb3V0cHV0LgorICAgICAgICAoVGVzdEFQSTo6cHJvbWlzZVJlamVj
dFRydWUpOiBDbGVhbiB1cCB0ZXN0IG91dHB1dC4KKyAgICAgICAgKFRlc3RBUEk6OnByb21pc2VV
bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAodGVzdENBUElWaWFD
cHApOgorICAgICAgICBBZGQgbmV3IEMrKyBBUEkgdGVzdC4KKworICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0
aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgQWRkIGNv
cnJlc3BvbmRpbmcgZ2xvYmFsIHRvIEpTQyBzaGVsbC4KKworICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnNldFVuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayBjb25zdCk6IEFkZGVkLgorICAgICAgICBLZWVw
IGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgY2FsbGJhY2suCisKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0hv
c3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAgICAgIEFkZCBkZWZhdWx0IGJlaGF2aW9y
LgorCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpjYWxsUHJv
bWlzZVJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChKU0M6OlZNOjpkaWRFeGhh
dXN0TWljcm90YXNrUXVldWUpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Vk06OnByb21pc2VSZWpl
Y3RlZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTTo6ZHJhaW5NaWNyb3Rhc2tzKToKKyAgICAg
ICAgV2hlbiBtaWNyb3Rhc2sgcXVldWUgaXMgZXhoYXVzdGVkLCBkZWFsIHdpdGggYW55IHBlbmRp
bmcgdW5oYW5kbGVkIHJlamVjdGlvbnMKKyAgICAgICAgKGluIGEgbWFubmVyIGJhc2VkIG9uIFJl
amVjdGVkUHJvbWlzZVRyYWNrZXIncyByZXBvcnRVbmhhbmRsZWRSZWplY3Rpb25zKSwKKyAgICAg
ICAgdGhlbiBtYWtlIHN1cmUgdGhpcyBkaWRuJ3QgY2F1c2UgYW55IG5ldyBtaWNyb3Rhc2tzIHRv
IGJlIGFkZGVkIHRvIHRoZSBxdWV1ZS4KKworICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgU3RvcmUgdW5oYW5kbGVkIHJlamVjdGlvbnMuCisgICAgICAgIChUaGlzIGNvbGxlY3Rpb24g
d2lsbCBhbHdheXMgYmUgZW1wdHkgaW4gdGhlIHByZXNlbmNlIG9mIFdlYkNvcmUuKQorCiAyMDE5
LTA4LTIxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIGluY29ycmVudCBKSVQgbGVhZCB0byBTdGFja092ZXJmbG93CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk5
MTMwYTE4MmM3MWFjYTQyMDQxZmYzMWM1YjJlOTY2ZDAwZjg1Ni4uZWQ3MTU4MDA3MjhhMDI5ZTFh
ZTMyOTFhMGU5NGE4NTkzOTc1MzhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5
LTA4LTIxICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAg
ICBKU0Mgc2hvdWxkIGhhdmUgcHVibGljIEFQSSBmb3IgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3
MTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TUdsb2JhbE9iamVjdDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpOgorICAgICAgICBNb3ZlIEpT
SW50ZXJuYWxQcm9taXNlIGVhcmx5LW91dCB0byBKU0Mgc2lkZS4KKwogMjAxOS0wOC0yMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBITFMgc3RyZWFt
cyBkaXNhcHBlYXIgZnJvbSBOb3cgUGxheWluZyB3aGVuIHBhdXNlZCBvbiB0aGUgbG9jayBzY3Jl
ZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAppbmRleCA3NzFi
ZjUyZWRjZjI4YzNiMTQ1ZDNmNWRjYWYyMDExMDc0MDViMTA3Li4yOTFhZmE4MzNkYzFkNWI2MjZi
YmU1M2E2NWIwNGIzNmQyNTdlZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dFJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmSW50
ZXJuYWwuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJBUElVdGlscy5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIK
ICNpbmNsdWRlICJKU0FQSUdsb2JhbE9iamVjdC5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUg
IlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJX
YXRjaGRvZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNTIsNiArMjU0LDI1IEBAIHZvaWQgSlNHbG9i
YWxDb250ZXh0U2V0TmFtZShKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBuYW1l
KQogICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldE5hbWUobmFtZSA/IG5hbWUt
PnN0cmluZygpIDogU3RyaW5nKCkpOwogfQogCit2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFu
ZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0
b0pTKGZ1bmN0aW9uKTsKKyAgICBpZiAoIW9iamVjdC0+aXNGdW5jdGlvbih2bSkpIHsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5zZXRVbmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwgb2JqZWN0KTsKK30KIAogY2xhc3MgQmFja3RyYWNl
RnVuY3RvciB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZlByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmUHJpdmF0ZS5oCmluZGV4IDUyMThhZDdhNWMwNzZlNzdjODFkZWEyNWY2ZmE1YjVlMjhi
NjZmMzAuLjZhZTY0OWVmM2UzOTg0ZDA4ZWFhYzU4ZGI3ZGE5ZWVhMjE2MjEwMGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmUHJpdmF0ZS5oCkBAIC0xMjgs
NiArMTI4LDE2IEBAIEpTX0VYUE9SVCBib29sIEpTR2xvYmFsQ29udGV4dEdldEluY2x1ZGVzTmF0
aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoCiAqLwogSlNfRVhQT1JUIHZvaWQg
SlNHbG9iYWxDb250ZXh0U2V0SW5jbHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVwb3J0aW5nRXhj
ZXB0aW9ucyhKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBib29sIGluY2x1ZGVzTmF0aXZlQ2FsbFN0
YWNrKSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKTsKIAorLyohCitA
ZnVuY3Rpb24KK0BhYnN0cmFjdCBTZXRzIHRoZSB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24g
Y2FsbGJhY2sgZm9yIGEgY29udGV4dC4KK0BkaXNjdXNzaW9uIFNpbWlsYXIgdG8gd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicpLCBidXQgZm9yIGNvbnRleHRzIG5v
dCBhc3NvY2lhdGVkIHdpdGggYSB3ZWIgdmlldy4KK0BwYXJhbSBjdHggVGhlIEpTR2xvYmFsQ29u
dGV4dCB0byBzZXQgdGhlIGNhbGxiYWNrIG9uLgorQHBhcmFtIGZ1bmN0aW9uIFRoZSBjYWxsYmFj
ayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFuZCByZWplY3Rp
b24gcmVhc29uIGFzIGFyZ3VtZW50cy4KK0BwYXJhbSBleGNlcHRpb24gQSBwb2ludGVyIHRvIGEg
SlNWYWx1ZVJlZiBpbiB3aGljaCB0byBzdG9yZSBhbiBleGNlcHRpb24sIGlmIGFueS4gUGFzcyBO
VUxMIGlmIHlvdSBkbyBub3QgY2FyZSB0byBzdG9yZSBhbiBleGNlcHRpb24uCisqLworSlNfRVhQ
T1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soSlNH
bG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3MoSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lP
U19UQkEpKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCmluZGV4IDFjZmQ0YzAzYTA4YmFkNDIyZTk0
MTQxODg1YmM5N2MwZThkMGViNjYuLjFmNDAzNzEzNmFmNTFhZGVlZDI2YzI2NWU3MDlmYTZjZDFi
ZWUxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcApA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZlBy
aXZhdGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZlByaXZhdGUuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KQEAgLTEzNyw2ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW1ib2xzRGVs
ZXRlUHJvcGVydHlGb3JLZXkoKTsKICAgICB2b2lkIHByb21pc2VSZXNvbHZlVHJ1ZSgpOwogICAg
IHZvaWQgcHJvbWlzZVJlamVjdFRydWUoKTsKKyAgICB2b2lkIHByb21pc2VVbmhhbmRsZWRSZWpl
Y3Rpb25DYWxsYmFjaygpOwogCiAgICAgaW50IGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFp
bGVkOyB9CiAKQEAgLTQ1NCw3ICs0NTYsNyBAQCB2b2lkIFRlc3RBUEk6OnByb21pc2VSZXNvbHZl
VHJ1ZSgpCiAKICAgICBhdXRvIHRydWVWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0
LCB0cnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlc29sdmUsIHJl
c29sdmUsIDEsICZ0cnVlVmFsdWUsICZleGNlcHRpb24pOwotICAgIGNoZWNrKCFleGNlcHRpb24s
ICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biByZXNvbHZlIHByb21pc2UiKTsKKyAgICBj
aGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gcmVzb2x2aW5n
IHByb21pc2UiKTsKICAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAidGhlbiByZXNwb25zZSBm
dW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKIH0KIApAQCAtNDc5LDcgKzQ4MSw3
IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlamVjdFRydWUoKQogCiAgICAgQVBJU3RyaW5nIGNh
dGNoU3RyaW5nKCJjYXRjaCIpOwogICAgIEpTVmFsdWVSZWYgY2F0Y2hGdW5jdGlvbiA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcHJvbWlzZSwgY2F0Y2hTdHJpbmcsICZleGNlcHRpb24p
OwotICAgIGNoZWNrKCFleGNlcHRpb24gJiYgY2F0Y2hGdW5jdGlvbiAmJiBKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dCwgY2F0Y2hGdW5jdGlvbiksICJQcm9taXNlIHNob3VsZCBoYXZlIGEgdGhlbiBv
YmplY3QgcHJvcGVydHkiKTsKKyAgICBjaGVjayghZXhjZXB0aW9uICYmIGNhdGNoRnVuY3Rpb24g
JiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhdGNoRnVuY3Rpb24pLCAiUHJvbWlzZSBzaG91
bGQgaGF2ZSBhIGNhdGNoIG9iamVjdCBwcm9wZXJ0eSIpOwogCiAgICAgSlNWYWx1ZVJlZiBwYXNz
ZWRUcnVlRnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0
LCB0cnVlU3RyaW5nLCBwYXNzZWRUcnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNv
bnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhdGNoRnVuY3Rpb24pLCBwcm9taXNlLCAx
LCAmcGFzc2VkVHJ1ZUZ1bmN0aW9uLCAmZXhjZXB0aW9uKTsKQEAgLTQ4Nyw4ICs0ODksMzUgQEAg
dm9pZCBUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSgpCiAKICAgICBhdXRvIHRydWVWYWx1ZSA9
IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0cnVlKTsKICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCAmdHJ1ZVZhbHVlLCAmZXhjZXB0aW9u
KTsKLSAgICBjaGVjayghZXhjZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24g
cmVzb2x2ZSBwcm9taXNlIik7Ci0gICAgY2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgInRoZW4gcmVz
cG9uc2UgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7CisgICAgY2hlY2soIWV4
Y2VwdGlvbiwgIk5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlamVjdGluZyBwcm9taXNl
Iik7CisgICAgY2hlY2socGFzc2VkVHJ1ZUNhbGxlZCwgImNhdGNoIHJlc3BvbnNlIGZ1bmN0aW9u
IHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOworfQorCit2b2lkIFRlc3RBUEk6OnByb21pc2VV
bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpCit7CisgICAgSlNPYmplY3RSZWYgcmVqZWN0Owor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBzdGF0aWMgYXV0byBwcm9t
aXNlID0gSlNPYmplY3RNYWtlRGVmZXJyZWRQcm9taXNlKGNvbnRleHQsIG51bGxwdHIsICZyZWpl
Y3QsICZleGNlcHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJjcmVhdGluZyBhIChyZWpl
Y3Qtb25seSkgZGVmZXJyZWQgcHJvbWlzZSBzaG91bGQgbm90IHRocm93Iik7CisgICAgc3RhdGlj
IGF1dG8gcmVhc29uID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgQVBJU3RyaW5nKCJyZWFz
b24iKSk7CisKKyAgICBzdGF0aWMgVGVzdEFQSSogdGVzdGVyID0gdGhpczsKKyAgICBzdGF0aWMg
Ym9vbCBjYWxsYmFja0NhbGxlZCA9IGZhbHNlOworCisgICAgYXV0byBjYWxsYmFjayA9IFtdKEpT
Q29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKSAtPiBKU1Zh
bHVlUmVmIHsKKyAgICAgICAgdGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ICYmIEpTVmFsdWVJ
c1N0cmljdEVxdWFsKGN0eCwgYXJndW1lbnRzWzBdLCBwcm9taXNlKSwgImNhbGxiYWNrIHNob3Vs
ZCByZWNlaXZlIHJlamVjdGVkIHByb21pc2UgYXMgZmlyc3QgYXJndW1lbnQiKTsKKyAgICAgICAg
dGVzdGVyLT5jaGVjayhhcmd1bWVudENvdW50ID4gMSAmJiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChj
dHgsIGFyZ3VtZW50c1sxXSwgcmVhc29uKSwgImNhbGxiYWNrIHNob3VsZCByZWNlaXZlIHJlamVj
dGlvbiByZWFzb24gYXMgc2Vjb25kIGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+Y2hlY2so
YXJndW1lbnRDb3VudCA9PSAyLCAiY2FsbGJhY2sgc2hvdWxkIG5vdCByZWNlaXZlIGEgdGhpcmQg
YXJndW1lbnQiKTsKKyAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICB9OworICAgIGF1dG8gY2FsbGJhY2tG
dW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQsIEFQSVN0
cmluZygiY2FsbGJhY2siKSwgY2FsbGJhY2spOworCisgICAgSlNHbG9iYWxDb250ZXh0U2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soY29udGV4dCwgY2FsbGJhY2tGdW5jdGlvbiwgJmV4Y2Vw
dGlvbik7CisgICAgY2hlY2soIWV4Y2VwdGlvbiwgInNldHRpbmcgdW5oYW5kbGVkIHJlamVjdGlv
biBjYWxsYmFjayBzaG91bGQgbm90IHRocm93Iik7CisKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0
aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCAmcmVhc29uLCAmZXhjZXB0aW9uKTsKKyAg
ICBjaGVjayghZXhjZXB0aW9uICYmIGNhbGxiYWNrQ2FsbGVkLCAidW5oYW5kbGVkIHJlamVjdGlv
biBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHVwb24gdW5oYW5kbGVkIHJlamVjdGlvbiIpOwog
fQogCiAjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXApAQCAtNTIxLDYgKzU1MCw3IEBAIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBm
aWx0ZXIpCiAgICAgUlVOKHN5bWJvbHNEZWxldGVQcm9wZXJ0eUZvcktleSgpKTsKICAgICBSVU4o
cHJvbWlzZVJlc29sdmVUcnVlKCkpOwogICAgIFJVTihwcm9taXNlUmVqZWN0VHJ1ZSgpKTsKKyAg
ICBSVU4ocHJvbWlzZVVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCkpOwogCiAgICAgaWYgKHRh
c2tzLmlzRW1wdHkoKSkgewogICAgICAgICBkYXRhTG9nTG4oIkZpbHRlcmVkIGFsbCB0ZXN0czog
RVJST1IiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNDFiZDZjNDkyMjk5MjhhNjZmZmQ2M2Y5
Y2E3ZDE2NWVjMzhmZTI5OS4uNzRkZmE3NDlhYTI4Zjc4Zjk2ZjI0YWJjOTZiYTQzOWEyYWFlMTll
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTM4NCw2ICszODQsOCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRpc2FibGVSaWNoU291cmNlSW5mbyhFeGVj
U3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFs
bG9jSW5BTG9vcChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uVG90YWxDb21waWxlVGltZShFeGVjU3RhdGUqKTsKIAorc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxs
YmFjayhFeGVjU3RhdGUqKTsKKwogc3RydWN0IFNjcmlwdCB7CiAgICAgZW51bSBjbGFzcyBTdHJp
Y3RNb2RlIHsKICAgICAgICAgU3RyaWN0LApAQCAtNjM4LDYgKzY0MCw4IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJkaXNhYmxlUmljaFNvdXJjZUluZm8iLCBmdW5jdGlv
bkRpc2FibGVSaWNoU291cmNlSW5mbywgMCk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibWFs
bG9jSW5BTG9vcCIsIGZ1bmN0aW9uTWFsbG9jSW5BTG9vcCwgMCk7CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAidG90YWxDb21waWxlVGltZSIsIGZ1bmN0aW9uVG90YWxDb21waWxlVGltZSwgMCk7
CisKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFj
ayIsIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2ssIDEpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykK
QEAgLTIzODQsNiArMjM4OCwxOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbldlYkFzc2VtYmx5TWVtb3J5TW9kZShFeGVjU3RhdGUqIGV4ZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFy
Z3VtZW50KDApLmdldE9iamVjdCgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPmlzRnVuY3Rpb24odm0pKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisKKyAgICBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKHZt
LCBvYmplY3QpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUg
Y3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBS
ZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBh
cmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMg
b2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCBmNTBhZmE2YTY3Y2I2NmVlYTU2N2UyOTNlYzRiNmUyNjQxZjk3YTk1Li5jMTJhNjUy
Y2FlMTExODJkNzQwYzg2MWFiYjNiMWIyNjViOTQwY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyNSw2ICs0MjUsOCBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgbV9uYW1lOwogCisgICAgU3Ryb25nPEpTT2JqZWN0PiBtX3VuaGFu
ZGxlZFJlamVjdGlvbkNhbGxiYWNrOworCiAgICAgRGVidWdnZXIqIG1fZGVidWdnZXI7CiAKICAg
ICBWTSYgbV92bTsKQEAgLTgwNyw2ICs4MDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROYW1l
KGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQogCisgICAgdm9pZCBzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhWTSYg
dm0sIEpTT2JqZWN0KiBmdW5jdGlvbikgeyBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLnNl
dCh2bSwgZnVuY3Rpb24pOyB9CisgICAgSlNPYmplY3QqIHVuaGFuZGxlZFJlamVjdGlvbkNhbGxi
YWNrKCkgY29uc3QgeyByZXR1cm4gbV91bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjay5nZXQoKTsg
fQorCiAgICAgSlNPYmplY3QqIGFycmF5QnVmZmVyQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVy
biBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmNvbnN0cnVjdG9yKHRoaXMpOyB9CiAKICAgICBKU09i
amVjdCogYXJyYXlCdWZmZXJQcm90b3R5cGUoQXJyYXlCdWZmZXJTaGFyaW5nTW9kZSBzaGFyaW5n
TW9kZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAppbmRleCAwODExNGNhNjk2MDZiMGMzMjYzOWMx
NDFlZThmODZmZjQzNWVhYTA0Li42NGE1ZWY2NWE4ZmJjYmU0YzJhOGI5Nzg4ODQ3OGVmMmYxYTEw
ZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC03NjYsMTAgKzc2NiwxMiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIo
RXhlY1N0YXRlKiBleAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIWdsb2JhbE9iamVj
dC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpCisg
ICAgSlNQcm9taXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJvbWlzZSo+KGV4ZWMtPmFyZ3VtZW50
KDApKTsKKworICAgIC8vIEludGVybmFsUHJvbWlzZXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRv
IHVzZXIgc2NyaXB0cy4KKyAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0ludGVybmFsUHJvbWlzZSo+
KHZtLCBwcm9taXNlKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzQ2FzdDxKU1Byb21pc2UqPihleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOwogCiAgICAgQVNTRVJUKG9wZXJhdGlvblZhbHVlLmlzTnVtYmVyKCkpOwpAQCAtNzc3
LDcgKzc3OSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNIb3N0
UHJvbWlzZVJlamVjdGlvblRyYWNrZXIoRXhlY1N0YXRlKiBleAogICAgIEFTU0VSVChvcGVyYXRp
b24gPT0gSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpSZWplY3QgfHwgb3BlcmF0aW9uID09
IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6SGFuZGxlKTsKICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwogCi0gICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcihnbG9iYWxPYmplY3QsIGV4ZWMsIHByb21pc2Us
IG9wZXJhdGlvbik7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2Jq
ZWN0LCBleGVjLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAgIGVsc2UgeworICAgICAgICBzd2l0
Y2ggKG9wZXJhdGlvbikgeworICAgICAgICBjYXNlIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlv
bjo6UmVqZWN0OgorICAgICAgICAgICAgdm0ucHJvbWlzZVJlamVjdGVkKHByb21pc2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9u
OjpIYW5kbGU6CisgICAgICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBiNzA5MmMwOGVmNzJiMGVjYTg5ZmYwYjVjNGJlMWFl
NTlhYTFkYmI1Li5lYjVkOTQ5NzQ4MzIxZDNmYzM0YWNlNTg2NDkxOGQzZGYxNjY1OWFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMDkwLDEzICsxMDkwLDUxIEBAIHZv
aWQgVk06OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxN
aWNyb3Rhc2s+JiYgdGFzaykKICAgICBtX21pY3JvdGFza1F1ZXVlLmFwcGVuZChtYWtlVW5pcXVl
PFF1ZXVlZFRhc2s+KCp0aGlzLCAmZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAK
LXZvaWQgVk06OmRyYWluTWljcm90YXNrcygpCit2b2lkIFZNOjpjYWxsUHJvbWlzZVJlamVjdGlv
bkNhbGxiYWNrKFN0cm9uZzxKU1Byb21pc2U+JiBwcm9taXNlKQogewotICAgIHdoaWxlICghbV9t
aWNyb3Rhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9taWNyb3Rhc2tRdWV1ZS50YWtl
Rmlyc3QoKS0+cnVuKCk7Ci0gICAgICAgIGlmIChtX29uRWFjaE1pY3JvdGFza1RpY2spCi0gICAg
ICAgICAgICBtX29uRWFjaE1pY3JvdGFza1RpY2soKnRoaXMpOworICAgIEpTT2JqZWN0KiBjYWxs
YmFjayA9IHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT51bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFj
aygpOworICAgIGlmICghY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKCp0aGlzKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRh
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoKnRoaXMsIGNhbGxiYWNrLCBj
YWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKKworICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQocHJvbWlzZS5nZXQo
KSk7CisgICAgYXJncy5hcHBlbmQocHJvbWlzZS0+cmVzdWx0KCp0aGlzKSk7CisgICAgY2FsbChw
cm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBjYWxsYmFjaywgY2FsbFR5cGUs
IGNhbGxEYXRhLCBqc051bGwoKSwgYXJncyk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
K30KKwordm9pZCBWTTo6ZGlkRXhoYXVzdE1pY3JvdGFza1F1ZXVlKCkKK3sKKyAgICBhdXRvIHVu
aGFuZGxlZFJlamVjdGlvbnMgPSBXVEZNb3ZlKG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFBy
b21pc2VzKTsKKyAgICBmb3IgKGF1dG8mIHByb21pc2UgOiB1bmhhbmRsZWRSZWplY3Rpb25zKSB7
CisgICAgICAgIGlmIChwcm9taXNlLT5pc0hhbmRsZWQoKnRoaXMpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgY2FsbFByb21pc2VSZWplY3Rpb25DYWxsYmFjayhwcm9taXNlKTsK
ICAgICB9Cit9CisKK3ZvaWQgVk06OnByb21pc2VSZWplY3RlZChKU1Byb21pc2UqIHByb21pc2Up
Cit7CisgICAgbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuY29uc3RydWN0QW5k
QXBwZW5kKCp0aGlzLCBwcm9taXNlKTsKK30KKwordm9pZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkK
K3sKKyAgICBkbyB7CisgICAgICAgIHdoaWxlICghbV9taWNyb3Rhc2tRdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIG1fbWljcm90YXNrUXVldWUudGFrZUZpcnN0KCktPnJ1bigpOworICAg
ICAgICAgICAgaWYgKG1fb25FYWNoTWljcm90YXNrVGljaykKKyAgICAgICAgICAgICAgICBtX29u
RWFjaE1pY3JvdGFza1RpY2soKnRoaXMpOworICAgICAgICB9CisgICAgICAgIGRpZEV4aGF1c3RN
aWNyb3Rhc2tRdWV1ZSgpOworICAgIH0gd2hpbGUgKCFtX21pY3JvdGFza1F1ZXVlLmlzRW1wdHko
KSk7CiAgICAgZmluYWxpemVTeW5jaHJvbm91c0pTRXhlY3V0aW9uKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCmluZGV4IGU1MGY4MTllMTg5ODM2MmU2ODg0NGI2NTNjMWNhZDM3
MmJlNzI2YWIuLjQzNDlhYjE3ZTAwOGQ3MmE5Njg0YzVlMDNjODJiNjliZGY5MzYwY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTIzLDYgKzEyMyw3IEBAIGNsYXNzIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb247CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CitjbGFzcyBK
U1Byb21pc2U7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1J1bkxv
b3BUaW1lcjsKIGNsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlOwpAQCAtOTIyLDYgKzkyMyw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeU5lZWRUZXJtaW5hdGlvbigpIHsgbV90cmFwcy5maXJl
VHJhcChWTVRyYXBzOjpOZWVkVGVybWluYXRpb24pOyB9CiAgICAgdm9pZCBub3RpZnlOZWVkV2F0
Y2hkb2dDaGVjaygpIHsgbV90cmFwcy5maXJlVHJhcChWTVRyYXBzOjpOZWVkV2F0Y2hkb2dDaGVj
ayk7IH0KIAorICAgIHZvaWQgcHJvbWlzZVJlamVjdGVkKEpTUHJvbWlzZSopOworCiAjaWYgRU5B
QkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAgICAgU3RhY2tUcmFjZSogbmF0aXZl
U3RhY2tUcmFjZU9mTGFzdFRocm93KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVTdGFja1RyYWNl
T2ZMYXN0VGhyb3cuZ2V0KCk7IH0KICAgICBUaHJlYWQqIHRocm93aW5nVGhyZWFkKCkgY29uc3Qg
eyByZXR1cm4gbV90aHJvd2luZ1RocmVhZC5nZXQoKTsgfQpAQCAtMTAwOCw2ICsxMDExLDkgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJh
Y2sodm9pZCopOwogICAgIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogCisgICAg
dm9pZCBjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKFN0cm9uZzxKU1Byb21pc2U+Jik7Cisg
ICAgdm9pZCBkaWRFeGhhdXN0TWljcm90YXNrUXVldWUoKTsKKwogI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQogICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsK
ICNlbmRpZgpAQCAtMTA2Myw2ICsxMDY5LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93Q2hpY2tlbj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAK
KyAgICBWZWN0b3I8U3Ryb25nPEpTUHJvbWlzZT4+IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3Rl
ZFByb21pc2VzOworCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFZNJik+IG1fb25FYWNoTWljcm90
YXNrVGljazsKICAgICB1aW50cHRyX3QgbV9jdXJyZW50V2Vha1JlZlZlcnNpb24geyAwIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApp
bmRleCA3ODhlMmU2NzdmN2YyMGNkMzlkMjE3MTJjZjg2NzQ2MGI1NmY1YjRiLi44MDMwZDM1NDBm
NWIxNDY0OTRjNTA2YmJiY2ZiOGUyNDMyYWYxN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC0yMTYsMTYgKzIxNiwxMSBAQCB2
b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9i
amVjdCoganNHbG9iYWxPYmplY3QsCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRy
YWNrZXItaW1wbGVtZW50YXRpb24KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oanNHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8qIGNvbnRleHQgPSBnbG9iYWxPYmplY3Quc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gSW50ZXJuYWxQcm9taXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3JpcHRz
LgotICAgIGlmIChKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0ludGVybmFsUHJvbWlzZSo+KHZt
LCBwcm9taXNlKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IElmIHNjcmlwdCBo
YXMgbXV0ZWQgZXJyb3JzIChjcm9zcyBvcmlnaW4pLCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuCiAg
ICAgLy8gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3MTQxNT4gSW1wbGVtZW50IHRoZSBgbXV0ZWQt
ZXJyb3JzYCBwcm9wZXJ0eSBvZiBTY3JpcHRzIHRvIGF2b2lkIG9uZXJyb3Ivb251bmhhbmRsZWRy
ZWplY3Rpb24gZm9yIGNyb3NzLW9yaWdpbiBzY3JpcHRzCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377136</attachid>
            <date>2019-08-23 11:19:14 -0700</date>
            <delta_ts>2019-08-23 11:51:26 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-197172-20190823111913.patch</filename>
            <type>text/plain</type>
            <size>22653</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZTg1ZjhlYTMyMjBlNjg5YjUyNGY0ZDIwZDdlNTY3OTVjOTBiN2YwLi43MWQwNzA5YzQwODA1OTJj
YTA2ZWRjOWZlMWJiOWUwMzQ1YjExZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NSBAQAorMjAxOS0wOC0yMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHB1YmxpYyBBUEkgZm9yIHVuaGFuZGxl
ZCBwcm9taXNlIHJlamVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4K
KworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIGEgdW5o
YW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGNhbGxiYWNrIHZpYSB0aGUgSlNDIEFQSS4KKyAgICAg
ICAgU2luY2UgdGhlcmUgaXMgbm8gZXZlbnQgbG9vcCBpbiBzdWNoIGFuIGVudmlyb25tZW50LCB0
aGlzIGNhbGxiYWNrIGZpcmVzIG9mZiBvZiB0aGUgbWljcm90YXNrIHF1ZXVlLgorICAgICAgICBU
aGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIHByb21pc2UgYW5kIHJlamVjdGlvbiByZWFzb24gYXMg
YXJndW1lbnRzIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCisKKyAgICAgICAgKiBB
UEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxl
ZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZlBy
aXZhdGUuaDoKKyAgICAgICAgQWRkIG5ldyBDKysgQVBJIGNhbGwuCisKKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jcHA6CisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlUmVzb2x2ZVRydWUp
OiBDbGVhbiB1cCB0ZXN0IG91dHB1dC4KKyAgICAgICAgKFRlc3RBUEk6OnByb21pc2VSZWplY3RU
cnVlKTogQ2xlYW4gdXAgdGVzdCBvdXRwdXQuCisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlVW5o
YW5kbGVkUmVqZWN0aW9uKTogQWRkZWQuCisgICAgICAgIChUZXN0QVBJOjpwcm9taXNlVW5oYW5k
bGVkUmVqZWN0aW9uRnJvbVVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAg
ICAgIChUZXN0QVBJOjpwcm9taXNlRWFybHlIYW5kbGVkUmVqZWN0aW9ucyk6IEFkZGVkLgorICAg
ICAgICAodGVzdENBUElWaWFDcHApOgorICAgICAgICBBZGQgbmV3IEMrKyBBUEkgdGVzdC4KKwor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgQWRkIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIHRvIEpTQyBzaGVsbC4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp1bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayBjb25zdCk6IEFk
ZGVkLgorICAgICAgICBLZWVwIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgY2FsbGJhY2suCisK
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcik6CisgICAgICAgIEFk
ZCBkZWZhdWx0IGJlaGF2aW9yLgorCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKTogQWRkZWQuCisgICAgICAg
IChKU0M6OlZNOjpkaWRFeGhhdXN0TWljcm90YXNrUXVldWUpOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6Vk06OnByb21pc2VSZWplY3RlZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTTo6ZHJhaW5N
aWNyb3Rhc2tzKToKKyAgICAgICAgV2hlbiBtaWNyb3Rhc2sgcXVldWUgaXMgZXhoYXVzdGVkLCBk
ZWFsIHdpdGggYW55IHBlbmRpbmcgdW5oYW5kbGVkIHJlamVjdGlvbnMKKyAgICAgICAgKGluIGEg
bWFubmVyIGJhc2VkIG9uIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIncyByZXBvcnRVbmhhbmRsZWRS
ZWplY3Rpb25zKSwKKyAgICAgICAgdGhlbiBtYWtlIHN1cmUgdGhpcyBkaWRuJ3QgY2F1c2UgYW55
IG5ldyBtaWNyb3Rhc2tzIHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZS4KKworICAgICAgICAqIHJ1
bnRpbWUvVk0uaDoKKyAgICAgICAgU3RvcmUgdW5oYW5kbGVkIHJlamVjdGlvbnMuCisgICAgICAg
IChUaGlzIGNvbGxlY3Rpb24gd2lsbCBhbHdheXMgYmUgZW1wdHkgaW4gdGhlIHByZXNlbmNlIG9m
IFdlYkNvcmUuKQorCiAyMDE5LTA4LTIyICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4K
IAogICAgICAgICBbd2F0Y2hPU10gRGlzYWJsZSBDb250ZW50IEZpbHRlcmluZyBpbiB0aGUgc2lt
dWxhdG9yIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThjZTc4YWYzMGJiYWQ0NWFiOTQyZjJmZThjZmM0
YWYyNTkwN2NlZC4uMzU3YWM5NDI5ODlkZDI4OTY1ODAxMTAyMzYzNjcyNjM0MjY5ZmFmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA4LTIzICBSb3NzIEtpcnNsaW5nICA8cm9z
cy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgcHVibGljIEFQ
SSBmb3IgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
S2VpdGggTWlsbGVyLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnByb21pc2VSZWplY3Rp
b25UcmFja2VyKToKKyAgICAgICAgTW92ZSBKU0ludGVybmFsUHJvbWlzZSBlYXJseS1vdXQgdG8g
SlNDIHNpZGUuCisKIDIwMTktMDgtMjIgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIFt3YXRjaE9TXSBEaXNhYmxlIENvbnRlbnQgRmlsdGVyaW5nIGluIHRoZSBzaW11
bGF0b3IgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcApp
bmRleCA3NzFiZjUyZWRjZjI4YzNiMTQ1ZDNmNWRjYWYyMDExMDc0MDViMTA3Li4yOTFhZmE4MzNk
YzFkNWI2MjZiYmU1M2E2NWIwNGIzNmQyNTdlZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHRSZWYuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDb250
ZXh0UmVmSW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJBUElV
dGlscy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJl
YWRpbmcuaCIKICNpbmNsdWRlICJKU0FQSUdsb2JhbE9iamVjdC5oIgpAQCAtMzcsNiArMzgsNyBA
QAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgog
I2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNp
bmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNTIsNiArMjU0LDI1IEBAIHZv
aWQgSlNHbG9iYWxDb250ZXh0U2V0TmFtZShKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBKU1N0cmlu
Z1JlZiBuYW1lKQogICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPnNldE5hbWUobmFt
ZSA/IG5hbWUtPnN0cmluZygpIDogU3RyaW5nKCkpOwogfQogCit2b2lkIEpTR2xvYmFsQ29udGV4
dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFj
dHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSB0b0pTKGZ1bmN0aW9uKTsKKyAgICBpZiAoIW9iamVjdC0+aXNGdW5jdGlvbih2bSkp
IHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMp
LT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwgb2JqZWN0KTsKK30KIAogY2xhc3Mg
QmFja3RyYWNlRnVuY3RvciB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dFJlZlByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UmVmUHJpdmF0ZS5oCmluZGV4IDUyMThhZDdhNWMwNzZlNzdjODFkZWEyNWY2
ZmE1YjVlMjhiNjZmMzAuLjZhZTY0OWVmM2UzOTg0ZDA4ZWFhYzU4ZGI3ZGE5ZWVhMjE2MjEwMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmUHJpdmF0ZS5o
CkBAIC0xMjgsNiArMTI4LDE2IEBAIEpTX0VYUE9SVCBib29sIEpTR2xvYmFsQ29udGV4dEdldElu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoCiAqLwogSlNfRVhQ
T1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0SW5jbHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVw
b3J0aW5nRXhjZXB0aW9ucyhKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBib29sIGluY2x1ZGVzTmF0
aXZlQ2FsbFN0YWNrKSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKTsK
IAorLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCBTZXRzIHRoZSB1bmhhbmRsZWQgcHJvbWlzZSBy
ZWplY3Rpb24gY2FsbGJhY2sgZm9yIGEgY29udGV4dC4KK0BkaXNjdXNzaW9uIFNpbWlsYXIgdG8g
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicpLCBidXQgZm9yIGNv
bnRleHRzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSB3ZWIgdmlldy4KK0BwYXJhbSBjdHggVGhlIEpT
R2xvYmFsQ29udGV4dCB0byBzZXQgdGhlIGNhbGxiYWNrIG9uLgorQHBhcmFtIGZ1bmN0aW9uIFRo
ZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBwcm9taXNlIGFu
ZCByZWplY3Rpb24gcmVhc29uIGFzIGFyZ3VtZW50cy4KK0BwYXJhbSBleGNlcHRpb24gQSBwb2lu
dGVyIHRvIGEgSlNWYWx1ZVJlZiBpbiB3aGljaCB0byBzdG9yZSBhbiBleGNlcHRpb24sIGlmIGFu
eS4gUGFzcyBOVUxMIGlmIHlvdSBkbyBub3QgY2FyZSB0byBzdG9yZSBhbiBleGNlcHRpb24uCisq
LworSlNfRVhQT1JUIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2Fs
bGJhY2soSlNHbG9iYWxDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3MoSlNDX01BQ19UQkEpLCBp
b3MoSlNDX0lPU19UQkEpKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCmluZGV4IDFjZmQ0YzAzYTA4
YmFkNDIyZTk0MTQxODg1YmM5N2MwZThkMGViNjYuLmZmNzA5MmViMWIwYmEyMzZlZGVkOWY2YzRm
OTZjYmM3YTUyY2I3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29u
dGV4dFJlZlByaXZhdGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZlBy
aXZhdGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KQEAgLTEzNyw2ICsxMzgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
eW1ib2xzRGVsZXRlUHJvcGVydHlGb3JLZXkoKTsKICAgICB2b2lkIHByb21pc2VSZXNvbHZlVHJ1
ZSgpOwogICAgIHZvaWQgcHJvbWlzZVJlamVjdFRydWUoKTsKKyAgICB2b2lkIHByb21pc2VVbmhh
bmRsZWRSZWplY3Rpb24oKTsKKyAgICB2b2lkIHByb21pc2VVbmhhbmRsZWRSZWplY3Rpb25Gcm9t
VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2soKTsKKyAgICB2b2lkIHByb21pc2VFYXJseUhhbmRs
ZWRSZWplY3Rpb25zKCk7CiAKICAgICBpbnQgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWls
ZWQ7IH0KIApAQCAtNDU0LDcgKzQ1OCw3IEBAIHZvaWQgVGVzdEFQSTo6cHJvbWlzZVJlc29sdmVU
cnVlKCkKIAogICAgIGF1dG8gdHJ1ZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IHRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVzb2x2ZSwgcmVz
b2x2ZSwgMSwgJnRydWVWYWx1ZSwgJmV4Y2VwdGlvbik7Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiwg
Ik5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIHJlc29sdmUgcHJvbWlzZSIpOworICAgIGNo
ZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biByZXNvbHZpbmcg
cHJvbWlzZSIpOwogICAgIGNoZWNrKHBhc3NlZFRydWVDYWxsZWQsICJ0aGVuIHJlc3BvbnNlIGZ1
bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLiIpOwogfQogCkBAIC00NzksNyArNDgzLDcg
QEAgdm9pZCBUZXN0QVBJOjpwcm9taXNlUmVqZWN0VHJ1ZSgpCiAKICAgICBBUElTdHJpbmcgY2F0
Y2hTdHJpbmcoImNhdGNoIik7CiAgICAgSlNWYWx1ZVJlZiBjYXRjaEZ1bmN0aW9uID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBwcm9taXNlLCBjYXRjaFN0cmluZywgJmV4Y2VwdGlvbik7
Ci0gICAgY2hlY2soIWV4Y2VwdGlvbiAmJiBjYXRjaEZ1bmN0aW9uICYmIEpTVmFsdWVJc09iamVj
dChjb250ZXh0LCBjYXRjaEZ1bmN0aW9uKSwgIlByb21pc2Ugc2hvdWxkIGhhdmUgYSB0aGVuIG9i
amVjdCBwcm9wZXJ0eSIpOworICAgIGNoZWNrKCFleGNlcHRpb24gJiYgY2F0Y2hGdW5jdGlvbiAm
JiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2F0Y2hGdW5jdGlvbiksICJQcm9taXNlIHNob3Vs
ZCBoYXZlIGEgY2F0Y2ggb2JqZWN0IHByb3BlcnR5Iik7CiAKICAgICBKU1ZhbHVlUmVmIHBhc3Nl
ZFRydWVGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQs
IHRydWVTdHJpbmcsIHBhc3NlZFRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oY2F0Y2hGdW5jdGlvbiksIHByb21pc2UsIDEs
ICZwYXNzZWRUcnVlRnVuY3Rpb24sICZleGNlcHRpb24pOwpAQCAtNDg3LDggKzQ5MSw3OCBAQCB2
b2lkIFRlc3RBUEk6OnByb21pc2VSZWplY3RUcnVlKCkKIAogICAgIGF1dG8gdHJ1ZVZhbHVlID0g
SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRydWUpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oY29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEsICZ0cnVlVmFsdWUsICZleGNlcHRpb24p
OwotICAgIGNoZWNrKCFleGNlcHRpb24sICJObyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biBy
ZXNvbHZlIHByb21pc2UiKTsKLSAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAidGhlbiByZXNw
b25zZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4iKTsKKyAgICBjaGVjayghZXhj
ZXB0aW9uLCAiTm8gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gcmVqZWN0aW5nIHByb21pc2Ui
KTsKKyAgICBjaGVjayhwYXNzZWRUcnVlQ2FsbGVkLCAiY2F0Y2ggcmVzcG9uc2UgZnVuY3Rpb24g
c2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQuIik7Cit9CisKK3ZvaWQgVGVzdEFQSTo6cHJvbWlzZVVu
aGFuZGxlZFJlamVjdGlvbigpCit7CisgICAgSlNPYmplY3RSZWYgcmVqZWN0OworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBzdGF0aWMgYXV0byBwcm9taXNlID0gSlNP
YmplY3RNYWtlRGVmZXJyZWRQcm9taXNlKGNvbnRleHQsIG51bGxwdHIsICZyZWplY3QsICZleGNl
cHRpb24pOworICAgIGNoZWNrKCFleGNlcHRpb24sICJjcmVhdGluZyBhIChyZWplY3Qtb25seSkg
ZGVmZXJyZWQgcHJvbWlzZSBzaG91bGQgbm90IHRocm93Iik7CisgICAgc3RhdGljIGF1dG8gcmVh
c29uID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgQVBJU3RyaW5nKCJyZWFzb24iKSk7CisK
KyAgICBzdGF0aWMgVGVzdEFQSSogdGVzdGVyID0gdGhpczsKKyAgICBzdGF0aWMgYm9vbCBjYWxs
YmFja0NhbGxlZCA9IGZhbHNlOworICAgIGF1dG8gY2FsbGJhY2sgPSBbXShKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKikgLT4gSlNWYWx1ZVJlZiB7Cisg
ICAgICAgIHRlc3Rlci0+Y2hlY2soYXJndW1lbnRDb3VudCAmJiBKU1ZhbHVlSXNTdHJpY3RFcXVh
bChjdHgsIGFyZ3VtZW50c1swXSwgcHJvbWlzZSksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2ZSBy
ZWplY3RlZCBwcm9taXNlIGFzIGZpcnN0IGFyZ3VtZW50Iik7CisgICAgICAgIHRlc3Rlci0+Y2hl
Y2soYXJndW1lbnRDb3VudCA+IDEgJiYgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY3R4LCBhcmd1bWVu
dHNbMV0sIHJlYXNvbiksICJjYWxsYmFjayBzaG91bGQgcmVjZWl2ZSByZWplY3Rpb24gcmVhc29u
IGFzIHNlY29uZCBhcmd1bWVudCIpOworICAgICAgICB0ZXN0ZXItPmNoZWNrKGFyZ3VtZW50Q291
bnQgPT0gMiwgImNhbGxiYWNrIHNob3VsZCBub3QgcmVjZWl2ZSBhIHRoaXJkIGFyZ3VtZW50Iik7
CisgICAgICAgIGNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7CisgICAgfTsKKyAgICBhdXRvIGNhbGxiYWNrRnVuY3Rpb24gPSBK
U09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBBUElTdHJpbmcoImNhbGxi
YWNrIiksIGNhbGxiYWNrKTsKKworICAgIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVj
dGlvbkNhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrRnVuY3Rpb24sICZleGNlcHRpb24pOworICAg
IGNoZWNrKCFleGNlcHRpb24sICJzZXR0aW5nIHVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sg
c2hvdWxkIG5vdCB0aHJvdyIpOworCisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0
LCByZWplY3QsIHJlamVjdCwgMSwgJnJlYXNvbiwgJmV4Y2VwdGlvbik7CisgICAgY2hlY2soIWV4
Y2VwdGlvbiAmJiBjYWxsYmFja0NhbGxlZCwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sg
c2hvdWxkIGJlIGNhbGxlZCB1cG9uIHVuaGFuZGxlZCByZWplY3Rpb24iKTsKK30KKwordm9pZCBU
ZXN0QVBJOjpwcm9taXNlVW5oYW5kbGVkUmVqZWN0aW9uRnJvbVVuaGFuZGxlZFJlamVjdGlvbkNh
bGxiYWNrKCkKK3sKKyAgICBzdGF0aWMgSlNPYmplY3RSZWYgcmVqZWN0OworICAgIHN0YXRpYyBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RNYWtlRGVmZXJyZWRQ
cm9taXNlKGNvbnRleHQsIG51bGxwdHIsICZyZWplY3QsICZleGNlcHRpb24pOworICAgIGNoZWNr
KCFleGNlcHRpb24sICJjcmVhdGluZyBhIChyZWplY3Qtb25seSkgZGVmZXJyZWQgcHJvbWlzZSBz
aG91bGQgbm90IHRocm93Iik7CisKKyAgICBzdGF0aWMgYXV0byBjYWxsYmFja0NhbGxDb3VudCA9
IDA7CisgICAgYXV0byBjYWxsYmFjayA9IFtdKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKSAt
PiBKU1ZhbHVlUmVmIHsKKyAgICAgICAgaWYgKCFjYWxsYmFja0NhbGxDb3VudCkKKyAgICAgICAg
ICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY3R4LCByZWplY3QsIHJlamVjdCwgMCwgbnVsbHB0
ciwgJmV4Y2VwdGlvbik7CisgICAgICAgIGNhbGxiYWNrQ2FsbENvdW50Kys7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworICAgIH07CisgICAgYXV0byBjYWxsYmFj
a0Z1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgQVBJ
U3RyaW5nKCJjYWxsYmFjayIpLCBjYWxsYmFjayk7CisKKyAgICBKU0dsb2JhbENvbnRleHRTZXRV
bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhjb250ZXh0LCBjYWxsYmFja0Z1bmN0aW9uLCAmZXhj
ZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9uLCAic2V0dGluZyB1bmhhbmRsZWQgcmVqZWN0
aW9uIGNhbGxiYWNrIHNob3VsZCBub3QgdGhyb3ciKTsKKworICAgIGNhbGxGdW5jdGlvbigiKGZ1
bmN0aW9uICgpIHsgUHJvbWlzZS5yZWplY3QoKTsgfSkiKTsKKyAgICBjaGVjayghZXhjZXB0aW9u
ICYmIGNhbGxiYWNrQ2FsbENvdW50ID09IDIsICJ1bmhhbmRsZWQgcmVqZWN0aW9uIGZyb20gdW5o
YW5kbGVkIHJlamVjdGlvbiBjYWxsYmFjayBzaG91bGQgYWxzbyB0cmlnZ2VyIHRoZSBjYWxsYmFj
ayIpOworfQorCit2b2lkIFRlc3RBUEk6OnByb21pc2VFYXJseUhhbmRsZWRSZWplY3Rpb25zKCkK
K3sKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgCisgICAgc3RhdGlj
IGJvb2wgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKKyAgICBhdXRvIGNhbGxiYWNrID0gW10oSlND
b250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpT
VmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopIC0+IEpTVmFsdWVSZWYgeworICAgICAgICBjYWxsYmFj
a0NhbGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OworICAgIH07CisgICAgYXV0byBjYWxsYmFja0Z1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVuY3Rp
b25XaXRoQ2FsbGJhY2soY29udGV4dCwgQVBJU3RyaW5nKCJjYWxsYmFjayIpLCBjYWxsYmFjayk7
CisKKyAgICBKU0dsb2JhbENvbnRleHRTZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhjb250
ZXh0LCBjYWxsYmFja0Z1bmN0aW9uLCAmZXhjZXB0aW9uKTsKKyAgICBjaGVjayghZXhjZXB0aW9u
LCAic2V0dGluZyB1bmhhbmRsZWQgcmVqZWN0aW9uIGNhbGxiYWNrIHNob3VsZCBub3QgdGhyb3ci
KTsKKworICAgIGNhbGxGdW5jdGlvbigiKGZ1bmN0aW9uICgpIHsgY29uc3QgcCA9IFByb21pc2Uu
cmVqZWN0KCk7IHAuY2F0Y2goKCkgPT4ge30pOyB9KSIpOworICAgIGNoZWNrKCFjYWxsYmFja0Nh
bGxlZCwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCBiZSBjYWxsZWQg
Zm9yIHN5bmNocm9ub3VzIGVhcmx5LWhhbmRsZWQgcmVqZWN0aW9uIik7CisKKyAgICBjYWxsRnVu
Y3Rpb24oIihmdW5jdGlvbiAoKSB7IGNvbnN0IHAgPSBQcm9taXNlLnJlamVjdCgpOyBQcm9taXNl
LnJlc29sdmUoKS50aGVuKCgpID0+IHsgcC5jYXRjaCgoKSA9PiB7fSk7IH0pOyB9KSIpOworICAg
IGNoZWNrKCFjYWxsYmFja0NhbGxlZCwgInVuaGFuZGxlZCByZWplY3Rpb24gY2FsbGJhY2sgc2hv
dWxkIG5vdCBiZSBjYWxsZWQgZm9yIGFzeW5jaHJvbm91cyBlYXJseS1oYW5kbGVkIHJlamVjdGlv
biIpOwogfQogCiAjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXApAQCAtNTIxLDYgKzU5NSw5IEBAIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBj
aGFyKiBmaWx0ZXIpCiAgICAgUlVOKHN5bWJvbHNEZWxldGVQcm9wZXJ0eUZvcktleSgpKTsKICAg
ICBSVU4ocHJvbWlzZVJlc29sdmVUcnVlKCkpOwogICAgIFJVTihwcm9taXNlUmVqZWN0VHJ1ZSgp
KTsKKyAgICBSVU4ocHJvbWlzZVVuaGFuZGxlZFJlamVjdGlvbigpKTsKKyAgICBSVU4ocHJvbWlz
ZVVuaGFuZGxlZFJlamVjdGlvbkZyb21VbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpKTsKKyAg
ICBSVU4ocHJvbWlzZUVhcmx5SGFuZGxlZFJlamVjdGlvbnMoKSk7CiAKICAgICBpZiAodGFza3Mu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFMb2dMbigiRmlsdGVyZWQgYWxsIHRlc3RzOiBFUlJP
UiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA0MWJkNmM0OTIyOTkyOGE2NmZmZDYzZjljYTdk
MTY1ZWMzOGZlMjk5Li43NGRmYTc0OWFhMjhmNzhmOTZmMjRhYmM5NmJhNDM5YTJhYWUxOWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzg0LDYgKzM4NCw4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGlzYWJsZVJpY2hTb3VyY2VJbmZvKEV4ZWNTdGF0
ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWxsb2NJ
bkFMb29wKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lKEV4ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
KEV4ZWNTdGF0ZSopOworCiBzdHJ1Y3QgU2NyaXB0IHsKICAgICBlbnVtIGNsYXNzIFN0cmljdE1v
ZGUgewogICAgICAgICBTdHJpY3QsCkBAIC02MzgsNiArNjQwLDggQEAgcHJvdGVjdGVkOgogICAg
ICAgICBhZGRGdW5jdGlvbih2bSwgImRpc2FibGVSaWNoU291cmNlSW5mbyIsIGZ1bmN0aW9uRGlz
YWJsZVJpY2hTb3VyY2VJbmZvLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJtYWxsb2NJ
bkFMb29wIiwgZnVuY3Rpb25NYWxsb2NJbkFMb29wLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJ0b3RhbENvbXBpbGVUaW1lIiwgZnVuY3Rpb25Ub3RhbENvbXBpbGVUaW1lLCAwKTsKKwor
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrIiwg
ZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaywgMSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFy
KiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpAQCAt
MjM4NCw2ICsyMzg4LDE5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uV2ViQXNzZW1ibHlNZW1vcnlNb2RlKEV4ZWNTdGF0ZSogZXhlCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1l
bnQoMCkuZ2V0T2JqZWN0KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+aXNGdW5jdGlvbih2bSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKworICAgIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2sodm0sIG9i
amVjdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwog
Ly8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQgcmlkIG9mIHRoZSBjcmFz
aCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0cyBmYWlsIGluIFJlbGVh
c2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBhIHNlcGFyYXRl
IG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmpl
Y3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmlu
ZGV4IGY1MGFmYTZhNjdjYjY2ZWVhNTY3ZTI5M2VjNGI2ZTI2NDFmOTdhOTUuLmMxMmE2NTJjYWUx
MTE4MmQ3NDBjODYxYWJiM2IxYjI2NWI5NDBjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDI1LDYgKzQyNSw4IEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyBtX25hbWU7CiAKKyAgICBTdHJvbmc8SlNPYmplY3Q+IG1fdW5oYW5kbGVk
UmVqZWN0aW9uQ2FsbGJhY2s7CisKICAgICBEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKIAogICAgIFZN
JiBtX3ZtOwpAQCAtODA3LDYgKzgwOSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5hbWUoY29u
c3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CiAKKyAgICB2b2lkIHNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKFZNJiB2bSwg
SlNPYmplY3QqIGZ1bmN0aW9uKSB7IG1fdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2suc2V0KHZt
LCBmdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogdW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2so
KSBjb25zdCB7IHJldHVybiBtX3VuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLmdldCgpOyB9CisK
ICAgICBKU09iamVjdCogYXJyYXlCdWZmZXJDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUuY29uc3RydWN0b3IodGhpcyk7IH0KIAogICAgIEpTT2JqZWN0
KiBhcnJheUJ1ZmZlclByb3RvdHlwZShBcnJheUJ1ZmZlclNoYXJpbmdNb2RlIHNoYXJpbmdNb2Rl
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4IDA4MTE0Y2E2OTYwNmIwYzMyNjM5YzE0MWVl
OGY4NmZmNDM1ZWFhMDQuLjY0YTVlZjY1YThmYmNiZTRjMmE4Yjk3ODg4NDc4ZWYyZjFhMTBkYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTc2NiwxMCArNzY2LDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0hvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcihFeGVj
U3RhdGUqIGV4CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICghZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcikKKyAgICBK
U1Byb21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4oZXhlYy0+YXJndW1lbnQoMCkp
OworCisgICAgLy8gSW50ZXJuYWxQcm9taXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNl
ciBzY3JpcHRzLgorICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTSW50ZXJuYWxQcm9taXNlKj4odm0s
IHByb21pc2UpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCi0gICAgSlNQcm9taXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJvbWlzZSo+KGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBKU1ZhbHVlIG9wZXJhdGlvblZhbHVlID0gZXhlYy0+YXJndW1lbnQo
MSk7CiAKICAgICBBU1NFUlQob3BlcmF0aW9uVmFsdWUuaXNOdW1iZXIoKSk7CkBAIC03NzcsNyAr
Nzc5LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0hvc3RQcm9t
aXNlUmVqZWN0aW9uVHJhY2tlcihFeGVjU3RhdGUqIGV4CiAgICAgQVNTRVJUKG9wZXJhdGlvbiA9
PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OlJlamVjdCB8fCBvcGVyYXRpb24gPT0gSlNQ
cm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpIYW5kbGUpOwogICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAKLSAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCkt
PnByb21pc2VSZWplY3Rpb25UcmFja2VyKGdsb2JhbE9iamVjdCwgZXhlYywgcHJvbWlzZSwgb3Bl
cmF0aW9uKTsKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgp
LT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcikKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5wcm9taXNlUmVqZWN0aW9uVHJhY2tlcihnbG9iYWxPYmplY3Qs
IGV4ZWMsIHByb21pc2UsIG9wZXJhdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIHN3aXRjaCAo
b3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgSlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uOjpS
ZWplY3Q6CisgICAgICAgICAgICB2bS5wcm9taXNlUmVqZWN0ZWQocHJvbWlzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246Okhh
bmRsZToKKyAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCmluZGV4IGI3MDkyYzA4ZWY3MmIwZWNhODlmZjBiNWM0YmUxYWU1OWFh
MWRiYjUuLmViNWQ5NDk3NDgzMjFkM2ZjMzRhY2U1ODY0OTE4ZDNkZjE2NjU5YWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEwOTAsMTMgKzEwOTAsNTEgQEAgdm9pZCBW
TTo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPE1pY3Jv
dGFzaz4mJiB0YXNrKQogICAgIG1fbWljcm90YXNrUXVldWUuYXBwZW5kKG1ha2VVbmlxdWU8UXVl
dWVkVGFzaz4oKnRoaXMsICZnbG9iYWxPYmplY3QsIFdURk1vdmUodGFzaykpKTsKIH0KIAotdm9p
ZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkKK3ZvaWQgVk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2Fs
bGJhY2soU3Ryb25nPEpTUHJvbWlzZT4mIHByb21pc2UpCiB7Ci0gICAgd2hpbGUgKCFtX21pY3Jv
dGFza1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX21pY3JvdGFza1F1ZXVlLnRha2VGaXJz
dCgpLT5ydW4oKTsKLSAgICAgICAgaWYgKG1fb25FYWNoTWljcm90YXNrVGljaykKLSAgICAgICAg
ICAgIG1fb25FYWNoTWljcm90YXNrVGljaygqdGhpcyk7CisgICAgSlNPYmplY3QqIGNhbGxiYWNr
ID0gcHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPnVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCk7
CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnRoaXMpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSgqdGhpcywgY2FsbGJhY2ssIGNhbGxE
YXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZChwcm9taXNlLmdldCgpKTsK
KyAgICBhcmdzLmFwcGVuZChwcm9taXNlLT5yZXN1bHQoKnRoaXMpKTsKKyAgICBjYWxsKHByb21p
c2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzTnVsbCgpLCBhcmdzKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworfQor
Cit2b2lkIFZNOjpkaWRFeGhhdXN0TWljcm90YXNrUXVldWUoKQoreworICAgIGF1dG8gdW5oYW5k
bGVkUmVqZWN0aW9ucyA9IFdURk1vdmUobV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlz
ZXMpOworICAgIGZvciAoYXV0byYgcHJvbWlzZSA6IHVuaGFuZGxlZFJlamVjdGlvbnMpIHsKKyAg
ICAgICAgaWYgKHByb21pc2UtPmlzSGFuZGxlZCgqdGhpcykpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBjYWxsUHJvbWlzZVJlamVjdGlvbkNhbGxiYWNrKHByb21pc2UpOwogICAg
IH0KK30KKwordm9pZCBWTTo6cHJvbWlzZVJlamVjdGVkKEpTUHJvbWlzZSogcHJvbWlzZSkKK3sK
KyAgICBtX2Fib3V0VG9CZU5vdGlmaWVkUmVqZWN0ZWRQcm9taXNlcy5jb25zdHJ1Y3RBbmRBcHBl
bmQoKnRoaXMsIHByb21pc2UpOworfQorCit2b2lkIFZNOjpkcmFpbk1pY3JvdGFza3MoKQorewor
ICAgIGRvIHsKKyAgICAgICAgd2hpbGUgKCFtX21pY3JvdGFza1F1ZXVlLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbV9taWNyb3Rhc2tRdWV1ZS50YWtlRmlyc3QoKS0+cnVuKCk7CisgICAgICAg
ICAgICBpZiAobV9vbkVhY2hNaWNyb3Rhc2tUaWNrKQorICAgICAgICAgICAgICAgIG1fb25FYWNo
TWljcm90YXNrVGljaygqdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZGlkRXhoYXVzdE1pY3Jv
dGFza1F1ZXVlKCk7CisgICAgfSB3aGlsZSAoIW1fbWljcm90YXNrUXVldWUuaXNFbXB0eSgpKTsK
ICAgICBmaW5hbGl6ZVN5bmNocm9ub3VzSlNFeGVjdXRpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKaW5kZXggZTUwZjgxOWUxODk4MzYyZTY4ODQ0YjY1M2MxY2FkMzcyYmU3
MjZhYi4uNjQzODllOTE2ODcxMGQwNjI3MDdmZThjMTAzY2ZkNjhmZTg2ZGYyMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMjMsNiArMTIzLDcgQEAgY2xhc3MgSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKK2NsYXNzIEpTUHJv
bWlzZTsKIGNsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIEpTUnVuTG9vcFRp
bWVyOwogY2xhc3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGU7CkBAIC05MjIsNiArOTIzLDggQEAgcHVi
bGljOgogICAgIHZvaWQgbm90aWZ5TmVlZFRlcm1pbmF0aW9uKCkgeyBtX3RyYXBzLmZpcmVUcmFw
KFZNVHJhcHM6Ok5lZWRUZXJtaW5hdGlvbik7IH0KICAgICB2b2lkIG5vdGlmeU5lZWRXYXRjaGRv
Z0NoZWNrKCkgeyBtX3RyYXBzLmZpcmVUcmFwKFZNVHJhcHM6Ok5lZWRXYXRjaGRvZ0NoZWNrKTsg
fQogCisgICAgdm9pZCBwcm9taXNlUmVqZWN0ZWQoSlNQcm9taXNlKik7CisKICNpZiBFTkFCTEUo
RVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKICAgICBTdGFja1RyYWNlKiBuYXRpdmVTdGFj
a1RyYWNlT2ZMYXN0VGhyb3coKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZVN0YWNrVHJhY2VPZkxh
c3RUaHJvdy5nZXQoKTsgfQogICAgIFRocmVhZCogdGhyb3dpbmdUaHJlYWQoKSBjb25zdCB7IHJl
dHVybiBtX3Rocm93aW5nVGhyZWFkLmdldCgpOyB9CkBAIC0xMDA4LDYgKzEwMTEsOSBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2
b2lkKik7CiAgICAgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKCk7CiAKKyAgICB2b2lk
IGNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2soU3Ryb25nPEpTUHJvbWlzZT4mKTsKKyAgICB2
b2lkIGRpZEV4aGF1c3RNaWNyb3Rhc2tRdWV1ZSgpOworCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2luaXRpYWxpemluZ09iamVjdENsYXNzOwogI2Vu
ZGlmCkBAIC0xMDYzLDYgKzEwNjksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIGhhbmRsZWQgcHJvbWlzZXMgZnJvbSB0aGlzIGxp
c3QgYXQgR0MgZmxpcC4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTAwNT4KKyAgICBWZWN0b3I8
U3Ryb25nPEpTUHJvbWlzZT4+IG1fYWJvdXRUb0JlTm90aWZpZWRSZWplY3RlZFByb21pc2VzOwor
CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFZNJik+IG1fb25FYWNoTWljcm90YXNrVGljazsKICAg
ICB1aW50cHRyX3QgbV9jdXJyZW50V2Vha1JlZlZlcnNpb24geyAwIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3ODhlMmU2
NzdmN2YyMGNkMzlkMjE3MTJjZjg2NzQ2MGI1NmY1YjRiLi44MDMwZDM1NDBmNWIxNDY0OTRjNTA2
YmJiY2ZiOGUyNDMyYWYxN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC0yMTYsMTYgKzIxNiwxMSBAQCB2b2lkIEpTRE9NR2xv
YmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNHbG9i
YWxPYmplY3QsCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNrZXItaW1wbGVt
ZW50YXRpb24KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byYgZ2xvYmFsT2Jq
ZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oanNHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8qIGNvbnRleHQgPSBnbG9iYWxPYmplY3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSW50ZXJuYWxQ
cm9taXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBzY3JpcHRzLgotICAgIGlmIChK
U0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0ludGVybmFsUHJvbWlzZSo+KHZtLCBwcm9taXNlKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IElmIHNjcmlwdCBoYXMgbXV0ZWQgZXJy
b3JzIChjcm9zcyBvcmlnaW4pLCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuCiAgICAgLy8gPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE3MTQxNT4gSW1wbGVtZW50IHRoZSBgbXV0ZWQtZXJyb3JzYCBwcm9w
ZXJ0eSBvZiBTY3JpcHRzIHRvIGF2b2lkIG9uZXJyb3Ivb251bmhhbmRsZWRyZWplY3Rpb24gZm9y
IGNyb3NzLW9yaWdpbiBzY3JpcHRzCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>