<?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>90736</bug_id>
          
          <creation_ts>2012-07-08 01:33:51 -0700</creation_ts>
          <short_desc>[chromium] Generalize input handler messaging for ubercompositor</short_desc>
          <delta_ts>2013-04-15 07:59:49 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88821</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandre Elias">aelias</reporter>
          <assigned_to name="Alexandre Elias">aelias</assigned_to>
          <cc>abarth</cc>
    
    <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>schenney</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>664467</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-08 01:33:51 -0700</bug_when>
    <thetext>[chromium] Generalize input handler messaging for ubercompositor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664468</commentid>
    <comment_count>1</comment_count>
      <attachid>151160</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-08 01:43:16 -0700</bug_when>
    <thetext>Created attachment 151160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664469</commentid>
    <comment_count>2</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-08 01:45:32 -0700</bug_when>
    <thetext>This is another offshoot of Bug 88821 based on James&apos;s code review suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664470</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 01:45:58 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664471</commentid>
    <comment_count>4</comment_count>
      <attachid>151160</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 01:51:22 -0700</bug_when>
    <thetext>Comment on attachment 151160
Patch

Attachment 151160 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13154787</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664536</commentid>
    <comment_count>5</comment_count>
      <attachid>151168</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-07-08 19:03:31 -0700</bug_when>
    <thetext>Created attachment 151168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668666</commentid>
    <comment_count>6</comment_count>
      <attachid>151168</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-13 00:17:19 -0700</bug_when>
    <thetext>Comment on attachment 151168
Patch

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

So my basic question is, if this is supposed to be our GraphicsContext3D equivalent for software mode, why not generalize our GraphicsContext3D and pass that around? What is the FrameHandler giving us that can&apos;t be sealed inside the GraphicsContext abstraction?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameHandler.h:35
&gt; +class CCFrameHandler {

Yeah, naming here is a bit of a puzzle. Maybe we can chat tomorrow about names and the rough roles each abstraction assumes? I see what you&apos;re trying to do, but I&apos;m trying to understand what this object does in &quot;gpu accelerated mode&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameHandler.h:40
&gt; +    virtual void outputCompositorFrame(const WebKit::WebCompositorFrame&amp;) = 0;

Bit confused about the mixing of Web and CC types here

&gt; Source/WebKit/chromium/public/WebCompositorFrameHandlerClient.h:31
&gt; +class WebCompositorFrame;

Erm, whats this? A renderpass list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674157</commentid>
    <comment_count>7</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-19 21:55:52 -0700</bug_when>
    <thetext>I&apos;ve changed my mind. I like this. I&apos;m really sorry to switcheroo on you. I agree though, we gotta fix the names. But we do need some mechanism to communicate vsync as well, and this provides a lot of that capability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680951</commentid>
    <comment_count>8</comment_count>
      <attachid>151168</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-27 12:21:30 -0700</bug_when>
    <thetext>Comment on attachment 151168
Patch

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

I like the direction a lot, but this needs a bit of thought around naming.  What about having WebCompositor instances provide the tear-offs?

&gt;&gt; Source/WebKit/chromium/public/WebCompositorFrameHandlerClient.h:31
&gt;&gt; +class WebCompositorFrame;
&gt; 
&gt; Erm, whats this? A renderpass list?

I can&apos;t find any definition or use of this type. Do we need it in this patch?

&gt; Source/WebKit/chromium/public/WebCompositorThread.h:36
&gt; +// Given a thread ID, this class provides a set of &quot;tear-off&quot; handlers for

this is misleading - the ID isn&apos;t for a thread (all compositor instances run on the same thread), it&apos;s for a compositor instance.  I think this needs a better name and better comments

&gt; Source/WebKit/chromium/src/WebCompositorFrameHandlerImpl.cpp:44
&gt; +    ASSERT(CCProxy::isImplThread());

I can&apos;t tell where this is picking CCProxy up from - could you add an explicit include? Did you compile test in debug mode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681020</commentid>
    <comment_count>9</comment_count>
      <attachid>151168</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-27 13:12:57 -0700</bug_when>
    <thetext>Comment on attachment 151168
Patch

Is there a reason we&apos;re not pursuing the WebCompositorRenderer as a base class of WGC3D and WGCUbercomp? That would be a much more natural way to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681022</commentid>
    <comment_count>10</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-27 13:15:01 -0700</bug_when>
    <thetext>Sorrry, WebCompositorContext.

WebCompositorContext {
   type: ubercomp 2d, ubercomp 3d, webgraphicscontext 3d;
   context3d() { might return null; }
   setFrameData(Framedata) = 0;
}
 

CCCompositorContext {
   .. mostly forwards to wcc...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681049</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-27 13:51:07 -0700</bug_when>
    <thetext>There&apos;s no reason to expose a context for embedders to use from the impl thread, is there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681052</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-27 13:52:58 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 151168 [details])
&gt; Is there a reason we&apos;re not pursuing the WebCompositorRenderer as a base class of WGC3D and WGCUbercomp? That would be a much more natural way to do this.

WebGraphicsContext3D is used in places completely unrelated to compositing (i.e. WebGL), so having a compositor-related base class wouldn&apos;t make sense.  I don&apos;t know what WGCUbercomp is or would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682160</commentid>
    <comment_count>13</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 10:36:34 -0700</bug_when>
    <thetext>Sorry, I feel pretty strongly here.

I think that the compositor is based around a graphics context. That it is 2D or 3D should be only discovered and handled inside the instantiation of the renderer.

IN an ubercomp world, the compositor needs to do resource provider operations and send frame data objects. It needs to also know whether 3D transforms are supported.

Currently, we pass around a mix of GraphicsContext3D, CCGraphicsContext and WebGraphicsContext3D.

What I am arguing is that there is a base class of CCGraphicsContext that can contain the resource provider and a SendFrameData command. We can pass that throughout the *entire* CCLayerTreeHost/etc path that is 2D/3D context agnostic. The ONLY part of the system that would access the 3D bit of CCRenderer would be the LRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682194</commentid>
    <comment_count>14</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 10:56:12 -0700</bug_when>
    <thetext>Also, I&apos;m not proposing that WGC3D derives from a base.

I&apos;m saying WebCompositorContext has a 3D context or a 2D context, depending.
 WebCompositorContext {
   WebCompositorContext2D* context2d();
   WebCompositorContext3D* context3d();
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682234</commentid>
    <comment_count>15</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-07-30 11:42:29 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Sorry, I feel pretty strongly here.
&gt; 
&gt; I think that the compositor is based around a graphics context. That it is 2D or 3D should be only discovered and handled inside the instantiation of the renderer.
&gt; 
&gt; IN an ubercomp world, the compositor needs to do resource provider operations and send frame data objects. It needs to also know whether 3D transforms are supported.
&gt; 
&gt; Currently, we pass around a mix of GraphicsContext3D, CCGraphicsContext and WebGraphicsContext3D.
&gt; 
&gt; What I am arguing is that there is a base class of CCGraphicsContext that can contain the resource provider and a SendFrameData command. We can pass that throughout the *entire* CCLayerTreeHost/etc path that is 2D/3D context agnostic. The ONLY part of the system that would access the 3D bit of CCRenderer would be the LRC.

We already have the CCRenderer abstraction for that, no?

CCLTHI has a CCRenderer which deals with putting the quad list to the screen. An  implementation of it is LRC, which directly renders it to a surface using a 3D context, another implementation would send the FrameData to the parent compositor - that one may not even need a context at all, it just talks to the CCResourceProvider to manage resource transfers, and passes the FrameData to the embedder (which can IPC it over).
Anything above CCLTHI (layers, etc) already don&apos;t need a context - they go through CCResourceProvider - except when they need to do GL operations (WebGL, accelerated canvas) - but it doesn&apos;t even have to be the same context as the CCRenderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682238</commentid>
    <comment_count>16</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 11:45:32 -0700</bug_when>
    <thetext>The bit I dont grok is the construction logic. E.g. CCLTHC::createCompositorContext() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682266</commentid>
    <comment_count>17</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 12:06:30 -0700</bug_when>
    <thetext>That is to say, how does CCLTHI boot up and know what resource provider and ccrenderer to instantiate? I was just figuring we&apos;d create a context, then go &quot;aha, you&apos;re 2d, create this provider and renderer.&quot; Maybe you had a different plan to create the right instances of things?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682287</commentid>
    <comment_count>18</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-07-30 12:32:52 -0700</bug_when>
    <thetext>I see what you mean. I don&apos;t think we&apos;ve thought about the details of the construction.

For the part that forwards to the parent compositor (I don&apos;t have a good name for that thing, say the &quot;parent compositor proxy&quot; for lack of better), it doesn&apos;t need a context per se, since it just needs to send data over IPC, so that&apos;s why the link to a context is not necessarily obvious - a fortiori if in the future we do the uploads in the parent compositor, and we wouldn&apos;t even have a compositor context in the child.

That being said, there is an implicit link in terms of capabilities of the parent compositor, i.e. if the parent isn&apos;t 3d-capable, then we shouldn&apos;t use a 3d context to manage the resources. There&apos;s probably more subtleties (e.g. max resource size, anti aliasing concerns, etc), and it sounds like we at least need to share some capabilities description between the 3d context and the parent compositor proxy.

Now, we could merge the context and the parent compositor proxy into a single WebCompositorContext class, I don&apos;t have a strong opinion (except I wouldn&apos;t call it &quot;context&quot;, but whatever), we just need to acknowledge that there may not be the proxy part (for the top-level compositor), nor the context part (for software-only), so it would look more like:
WebCompositorContext {
  WebParentCompositorProxy* proxy();  // may be null
  WebGraphicsContext3D* context();  // may be null
  Capabilities caps();  // e.g. &quot;type&quot;, max resource size, and other concerns.
};

For the 2D context concept, I don&apos;t think we need any, do we? IOW skia contexts don&apos;t allocate resources that need to be kept for frame to frame... Or is it where we want to expose the management of transferable resources (in shm)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682314</commentid>
    <comment_count>19</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 13:06:34 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; For the part that forwards to the parent compositor (I don&apos;t have a good name for that thing, say the &quot;parent compositor proxy&quot; for lack of better), it doesn&apos;t need a context per se, since it just needs to send data over IPC, so that&apos;s why the link to a context is not necessarily obvious - a fortiori if in the future we do the uploads in the parent compositor, and we wouldn&apos;t even have a compositor context in the child.

Dumb question: How does ReourceProvider get implemented when you dont have a wgc3d? Its going to need to get out of cc somehow to do IPCs...

&gt; 
That being said, there is an implicit link in terms of capabilities of the parent compositor, i.e. if the 
&gt; 
&gt; Now, we could merge the context and the parent compositor proxy into a single WebCompositorContext class, I don&apos;t have a strong opinion (except I wouldn&apos;t call it &quot;context&quot;, but whatever), we just need to acknowledge that there may not be the proxy part (for the top-level compositor), nor the context part (for software-only), so it would look more like:
&gt; WebCompositorContext {
&gt;   WebParentCompositorProxy* proxy();  // may be null
&gt;   WebGraphicsContext3D* context();  // may be null
&gt;   Capabilities caps();  // e.g. &quot;type&quot;, max resource size, and other concerns.
&gt; };
&gt;
 
I buy that context is the wrong word. Its this where the word Surface or output come into play? E.g. this is the thing that you&apos;re outputting into...

Vsync sort of relate here. Originally, I was hijacking the input filter mechanism for it. But, as we saw here, thats sort of odd. And, its not really part of a 2d or 3d api. Its really a property of this WebCompositorSomething that is the parent &quot;thing&quot;.


&gt; For the 2D context concept, I don&apos;t think we need any, do we?
Sorry, need what?

&gt;IOW skia contexts don&apos;t allocate resources that need to be kept for frame to frame... Or is it where we want to expose the management of transferable resources (in shm)?

For the 2D device, there will still be bitmaps that back resources... Skia Android can do stuff with these being persisted rather than us managing them as void*&apos;s...

I think this gets back to the question of how to map ResourceProvider to the shm/software case. I sort of figured we could dangle the resource APIs off of this thing as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682323</commentid>
    <comment_count>20</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-07-30 13:20:56 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; For the part that forwards to the parent compositor (I don&apos;t have a good name for that thing, say the &quot;parent compositor proxy&quot; for lack of better), it doesn&apos;t need a context per se, since it just needs to send data over IPC, so that&apos;s why the link to a context is not necessarily obvious - a fortiori if in the future we do the uploads in the parent compositor, and we wouldn&apos;t even have a compositor context in the child.
&gt; 
&gt; Dumb question: How does ReourceProvider get implemented when you dont have a wgc3d? Its going to need to get out of cc somehow to do IPCs...

I guess that&apos;d go to the parent compositor proxy interface. SendFrameData would have:
- the list of quads
- the list of resources that are passed from child to parent
- the list of uploads to do to resources (resource ID + shm handle + rects).

&gt; 
&gt; &gt; 
&gt; That being said, there is an implicit link in terms of capabilities of the parent compositor, i.e. if the 
&gt; &gt; 
&gt; &gt; Now, we could merge the context and the parent compositor proxy into a single WebCompositorContext class, I don&apos;t have a strong opinion (except I wouldn&apos;t call it &quot;context&quot;, but whatever), we just need to acknowledge that there may not be the proxy part (for the top-level compositor), nor the context part (for software-only), so it would look more like:
&gt; &gt; WebCompositorContext {
&gt; &gt;   WebParentCompositorProxy* proxy();  // may be null
&gt; &gt;   WebGraphicsContext3D* context();  // may be null
&gt; &gt;   Capabilities caps();  // e.g. &quot;type&quot;, max resource size, and other concerns.
&gt; &gt; };
&gt; &gt;
&gt; 
&gt; I buy that context is the wrong word. Its this where the word Surface or output come into play? E.g. this is the thing that you&apos;re outputting into...

I like that. WebCompositorOutput or WebCompositorDestination or something else.

&gt; 
&gt; Vsync sort of relate here. Originally, I was hijacking the input filter mechanism for it. But, as we saw here, thats sort of odd. And, its not really part of a 2d or 3d api. Its really a property of this WebCompositorSomething that is the parent &quot;thing&quot;.

Agreed, and we&apos;ll also need the back-pressure IPCs (which will also recycle the resources that aren&apos;t in use any more by the parent).

&gt; 
&gt; 
&gt; &gt; For the 2D context concept, I don&apos;t think we need any, do we?
&gt; Sorry, need what?

A concept of a 2D context...

&gt; 
&gt; &gt;IOW skia contexts don&apos;t allocate resources that need to be kept for frame to frame... Or is it where we want to expose the management of transferable resources (in shm)?
&gt; 
&gt; For the 2D device, there will still be bitmaps that back resources... Skia Android can do stuff with these being persisted rather than us managing them as void*&apos;s...
&gt; 
&gt; I think this gets back to the question of how to map ResourceProvider to the shm/software case. I sort of figured we could dangle the resource APIs off of this thing as well.

Ok, I can buy that. Again, not sure if &quot;context&quot; is the right word since we only concern ourselves with the resource allocation, but we can have that concept here - WebResourceAllocator2D?
That can also be used for the renderer-doesn&apos;t-upload-anymore extension, to allocate the shm handles (or whatever backing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682464</commentid>
    <comment_count>21</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 15:27:59 -0700</bug_when>
    <thetext>I can try to hack up a WebCompositorOutput class and put things on there. I had originally told @aelias that I&apos;d do that, anyway.

Maybe WebCompositorOutputSurface. So that when we talk about it we can say &quot;Oh, you need to put that on the output surface.&quot; Saying &quot;put it on the output&quot; doesnt&apos; work too good. :)

&gt; &gt; &gt; For the 2D context concept, I don&apos;t think we need any, do we?
&gt; &gt; Sorry, need what?
&gt; 
&gt; A concept of a 2D context...
Probably not. It seems to me that the main output class would have SendFrameData, frame flow control stuff, and also david&apos;s WIP upload flow control stuff. Presumably also methods for allocation/shm that are common between ubercomp/2d/3d... for those, maybe we can just put them right on the WebCompositorOutput

&gt; Ok, I can buy that. Again, not sure if &quot;context&quot; is the right word since we only concern ourselves with the resource allocation, but we can have that concept here - WebResourceAllocator2D?

Understood and agreed on the context point. Is there any common APIs between 3D/ubercomp(2d/3d) allocator? It seems to me that the basic shm-based texture upload probably looks the same regardless of ubercomp state?

This is part of me trying ot figure out if we need a specific resource provider/allocator class for 2d, or whether resource managment for the 2d case is really the absence of webgl-specific interop features....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684341</commentid>
    <comment_count>22</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-08-01 11:12:19 -0700</bug_when>
    <thetext>An alternate way to do this posted here:
https://bugs.webkit.org/show_bug.cgi?id=92890</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684363</commentid>
    <comment_count>23</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-01 11:26:45 -0700</bug_when>
    <thetext>For resource provider, there are two ways to do it:
1. Send shared memory to GPU process (current approach) and use a shared context to give them to the root compositor
2. Send shared memory to browser process and hand the software bitmap over to WebLayerTreeView interface of root compositor (required for software compositing, and also Android&apos;s desired approach for all modes)

The main advantage of (1) is that it&apos;s easily changed to Ganesh-based painting.  So Antoine told me he wants ChromeOS to continue using this approach.  Note that in (1), the shared memory is handled deep inside the GL implementation.

So for (2), let&apos;s write a completely separate shared-memory implementation that doesn&apos;t try to collapse in any of the existing code, and make the rest of CC indifferent to which resource provider is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684393</commentid>
    <comment_count>24</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-01 11:43:16 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; For resource provider, there are two ways to do it:
&gt; 1. Send shared memory to GPU process (current approach) and use a shared context to give them to the root compositor
&gt; 2. Send shared memory to browser process and hand the software bitmap over to WebLayerTreeView interface of root compositor (required for software compositing, and also Android&apos;s desired approach for all modes)
&gt; 
&gt; The main advantage of (1) is that it&apos;s easily changed to Ganesh-based painting.  So Antoine told me he wants ChromeOS to continue using this approach.  Note that in (1), the shared memory is handled deep inside the GL implementation.
&gt; 
&gt; So for (2), let&apos;s write a completely separate shared-memory implementation that doesn&apos;t try to collapse in any of the existing code, and make the rest of CC indifferent to which resource provider is used.


At least for the pure software case, I&apos;d imagine we don&apos;t want to involve a GPU process just to pass SHM handles around.


To be clear, what I see for #1 is that it simplifies hooking up everything, because what we share between the child and the parent is textures, not SHM buffer that need to be uploaded to textures, because the latter needs more logic to schedule the uploads at the right time, extend the IPCs etc, whereas the former would be identical whether the texture comes from a tile, webgl, canvas, pepper, video (software or hardware), etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684401</commentid>
    <comment_count>25</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-08-01 11:47:34 -0700</bug_when>
    <thetext>So it sounds like (as is often the case with chrome) we have to do #1 and #2. :) Therefore, +1 to making this pluggable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684919</commentid>
    <comment_count>26</comment_count>
      <attachid>151168</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-01 20:03:35 -0700</bug_when>
    <thetext>Comment on attachment 151168
Patch

Clearing review flag since https://bugs.webkit.org/show_bug.cgi?id=92890 mostly supercedes this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151160</attachid>
            <date>2012-07-08 01:43:16 -0700</date>
            <delta_ts>2012-07-08 19:03:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90736-20120708014315.patch</filename>
            <type>text/plain</type>
            <size>48217</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM5MmVjYTBkYTczMjcx
N2RmZjYzY2M4NDM4ZjdjYzYyZGUwMjJlYS4uM2E1NjMzODdiMjcxZjg5NjM5NGM1MDljNDZiYTY4
YzE4MGYxNDhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA3LTA4ICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIEdl
bmVyYWxpemUgaW5wdXQgaGFuZGxlciBtZXNzYWdpbmcgZm9yIHViZXJjb21wb3NpdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFViZXJjb21wb3NpdG9y
IHdpbGwgcmVxdWlyZSBzZW5kaW5nIG91dCBkYXRhIGZyb20gdGhlIGNvbXBvc2l0b3IKKyAgICAg
ICAgdGhyZWFkIHRvIENocm9taXVtLCB3aXRob3V0IHRvdWNoaW5nIHRoZSBtYWluIHRocmVhZC4g
IFRoaXMgaXMgc2ltaWxhcgorICAgICAgICB0byB3aGF0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXIgYWxyZWFkeSBkb2VzIC0tIGl0IGhhcyBhIHNjaGVtZSBmb3IKKyAgICAgICAgZXN0YWJsaXNo
aW5nIGEgImNvbm5lY3Rpb24iIGJhc2VkIG9uIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGEgY29tcG9z
aXRvcgorICAgICAgICBJRCBudW1iZXIuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgSSBzcGxp
dCBvZmYgdGhlIGlucHV0IGhhbmRsZXIncyBjb25uZWN0aW9uLWVzdGFibGlzaGluZworICAgICAg
ICBsb2dpYyBpbnRvIGEgbmV3IHNldCBvZiBjbGFzc2VzICJXZWJDb21wb3NpdG9yVGhyZWFkIi4K
KyAgICAgICAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBub3cgaXMgbW9yZSBwdXJlbHkgZm9j
dXNlZCBvbiBpbnB1dCBoYW5kbGluZworICAgICAgICBhbmQgaXMgb3duZWQgYnkgV2ViQ29tcG9z
aXRvclRocmVhZC4gIEkgdGhlbiBjcmVhdGVkIGFub3RoZXIgY2xhc3MKKyAgICAgICAgIldlYkNv
bXBvc2l0b3JGcmFtZSIgdG8gYmUgdXNlZCBieSB0aGUgdWJlcmNvbXBvc2l0b3IgYW5kIHRha2lu
ZworICAgICAgICBhZHZhbnRhZ2Ugb2YgdGhlIHNhbWUgY2FwYWJpbGl0aWVzLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gKE5vLW9wIHJlZmFjdG9yaW5nLikKKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lSGFu
ZGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ0NGcmFtZUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZUhhbmRsZXI6On5D
Q0ZyYW1lSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lSGFuZGxlcjo6Q0NGcmFt
ZUhhbmRsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5w
dXRIYW5kbGVyLmg6CisgICAgICAgIChDQ0lucHV0SGFuZGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRIYW5kbGVycy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW1wbC5oLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChDQ1RocmVhZEhhbmRsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkSGFuZGxlcnM6On5DQ1RocmVhZEhhbmRsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkSGFuZGxlcnM6OkNDVGhyZWFkSGFuZGxlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1RocmVhZFByb3h5KToKKwogMjAxMi0w
Ny0wMyAgQWxleCBTYWtoYXJ0Y2hvdWsgIDxhbGV4c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQXZvaWQgY2FsbGluZyBnZXRVbmlmb3JtTG9jYXRpb24/PygpIGluIHRoZSBj
b21wb3NpdG9yIHN0YXJ0dXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGY2N2ZlZjI3
ODJjNGMwOTg0YWFlNjFhMDA3MDYxNWQ0MmJiODExZi4uZjkzYmM1NzM0NjYwZjRiM2JlZDMyYmFl
NDYzZjAxYWY0OTc3YmEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
MCBAQAorMjAxMi0wNy0wOCAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CisK
KyAgICAgICAgW2Nocm9taXVtXSBHZW5lcmFsaXplIGlucHV0IGhhbmRsZXIgbWVzc2FnaW5nIGZv
ciB1YmVyY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTA3MzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVYmVyY29tcG9zaXRvciB3aWxsIHJlcXVpcmUgc2VuZGluZyBvdXQgZGF0YSBmcm9t
IHRoZSBjb21wb3NpdG9yCisgICAgICAgIHRocmVhZCB0byBDaHJvbWl1bSwgd2l0aG91dCB0b3Vj
aGluZyB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIHNpbWlsYXIKKyAgICAgICAgdG8gd2hhdCBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIGFscmVhZHkgZG9lcyAtLSBpdCBoYXMgYSBzY2hlbWUg
Zm9yCisgICAgICAgIGVzdGFibGlzaGluZyBhICJjb25uZWN0aW9uIiBiYXNlZCBvbiBzdGF0aWMg
dmFyaWFibGVzIGFuZCBhIGNvbXBvc2l0b3IKKyAgICAgICAgSUQgbnVtYmVyLgorCisgICAgICAg
IEluIHRoaXMgcGF0Y2gsIEkgc3BsaXQgb2ZmIHRoZSBpbnB1dCBoYW5kbGVyJ3MgY29ubmVjdGlv
bi1lc3RhYmxpc2hpbmcKKyAgICAgICAgbG9naWMgaW50byBhIG5ldyBzZXQgb2YgY2xhc3NlcyAi
V2ViQ29tcG9zaXRvclRocmVhZCIuCisgICAgICAgIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIg
bm93IGlzIG1vcmUgcHVyZWx5IGZvY3VzZWQgb24gaW5wdXQgaGFuZGxpbmcKKyAgICAgICAgYW5k
IGlzIG93bmVkIGJ5IFdlYkNvbXBvc2l0b3JUaHJlYWQuICBJIHRoZW4gY3JlYXRlZCBhbm90aGVy
IGNsYXNzCisgICAgICAgICJXZWJDb21wb3NpdG9yRnJhbWUiIHRvIGJlIHVzZWQgYnkgdGhlIHVi
ZXJjb21wb3NpdG9yIGFuZCB0YWtpbmcKKyAgICAgICAgYWR2YW50YWdlIG9mIHRoZSBzYW1lIGNh
cGFiaWxpdGllcy4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dl
YkNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9y
SW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkNvbXBvc2l0b3JGcmFtZUhh
bmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyOjp+V2Vi
Q29tcG9zaXRvckZyYW1lSGFuZGxlcik6CisgICAgICAgICogcHVibGljL1dlYkNvbXBvc2l0b3JG
cmFtZUhhbmRsZXJDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29tcG9zaXRvckltcGwuaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJD
b21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlckNsaWVudDo6fldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQp
OgorICAgICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyLmg6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdG9yVGhyZWFkLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmguCisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAg
ICogcHVibGljL1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViV2lkZ2V0Q2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xpZW50OjpkaWRBY3RpdmF0ZUNvbXBvc2l0b3Ip
OgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbC5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmguCisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9yRnJhbWVIYW5k
bGVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvckZyYW1lSGFu
ZGxlckltcGw6OldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGw6On5XZWJDb21wb3NpdG9yRnJhbWVIYW5k
bGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBs
OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
SW1wbDo6b3V0cHV0Q29tcG9zaXRvckZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViQ29tcG9zaXRv
ckZyYW1lSGFuZGxlckltcGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29tcG9zaXRvckltcGwuaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJD
b21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbCk6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JJ
bXBsLmg6CisgICAgICAgIChXZWJDb21wb3NpdG9ySW1wbCk6CisgICAgICAgICogc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6On5XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCk6CisgICAgICAgICogc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmg6CisgICAgICAgIChXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbCk6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZEhhbmRsZXJzOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGw6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JUaHJlYWQ6OmZyb21JZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGw6OmZyb21J
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGw6Oldl
YkNvbXBvc2l0b3JUaHJlYWRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclRo
cmVhZEltcGw6On5XZWJDb21wb3NpdG9yVGhyZWFkSW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0b3JUaHJlYWRJbXBsOjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRvclRocmVhZEltcGw6OmluaXRpYWxpemVJbnB1dEhhbmRsZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6aW5pdGlhbGl6ZUZyYW1lSGFuZGxlcik6
CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmguCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViQ29tcG9zaXRvclRocmVhZEltcGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6aW5wdXRIYW5kbGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGw6OmZyYW1lSGFuZGxlcik6CisgICAgICAgICog
dGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6VEVTVCk6CisKIDIwMTItMDctMDMgIEFsZXggU2FraGFydGNob3VrICA8YWxleHN0QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEF2b2lkIGNhbGxpbmcgZ2V0VW5pZm9y
bUxvY2F0aW9uPz8oKSBpbiB0aGUgY29tcG9zaXRvciBzdGFydHVwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYzczMzJkMjAzYzFmZGFkYTliMDE1ZTE3MzliZTMxZWJjZGNkY2U2NC4uYTI4MGFjZGE2NWZk
YmYwOWU2YmRhZTQ0MWZkN2Y1N2Q4ZjQ0ZDcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODI5NSw2
ICs4Mjk1LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRm9udEF0bGFzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NGb250QXRsYXMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NGcmFtZUhhbmRsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ291
bnRlci5jcHAnLApAQCAtODM4MSw2ICs4MzgyLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZEhhbmRsZXJzLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkVGFzay5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFm
YTQ1ZGIzZWEwYmYxODYxOWQ4MDM3NjIzOTk2MDZkODBjZTFmYTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lSGFu
ZGxlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0ZyYW1lSGFuZGxl
cl9oCisjZGVmaW5lIENDRnJhbWVIYW5kbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbXBvc2l0b3JGcmFtZTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0ZyYW1lSGFuZGxlciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ0NGcmFtZUhhbmRsZXIpOworcHVibGljOgorICAgIHZpcnR1YWwg
fkNDRnJhbWVIYW5kbGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb3V0cHV0Q29tcG9zaXRv
ckZyYW1lKGNvbnN0IFdlYktpdDo6V2ViQ29tcG9zaXRvckZyYW1lJikgPSAwOworCitwcm90ZWN0
ZWQ6CisgICAgQ0NGcmFtZUhhbmRsZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NJbnB1dEhhbmRsZXIuaAppbmRleCA3N2RkMmRiY2Y3NGI3N2Y4MDI3MWNlYzRmMjViYTcxYzA1
MGZmMmJhLi4xMzU1YmY4YjA1Zjk1NWMyYWZkOTI3NmQ1NjYxZWFmYmYxYzAyMDQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgKQEAgLTg5LDEwICs4OSw4IEBAIHByb3RlY3RlZDoKIGNsYXNz
IENDSW5wdXRIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxl
cik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NJbnB1dEhhbmRsZXI+IGNyZWF0
ZShDQ0lucHV0SGFuZGxlckNsaWVudCopOwogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyKCkg
eyB9CiAKLSAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lKSA9IDA7CiAKIHByb3RlY3RlZDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkSGFuZGxlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkSGFuZGxlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzJiNmIzZDVhZmY0MmM1
ZTEwMWUxZWRiNjQ3ZjMwNDkzYmFiNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRIYW5kbGVycy5oCkBAIC0w
LDAgKzEsNTQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RocmVhZEhhbmRsZXJzX2gKKyNkZWZp
bmUgQ0NUaHJlYWRIYW5kbGVyc19oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDSW5wdXRIYW5kbGVyOworY2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQ7CitjbGFzcyBDQ0Zy
YW1lSGFuZGxlcjsKKworY2xhc3MgQ0NUaHJlYWRIYW5kbGVycyB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NUaHJlYWRIYW5kbGVycyk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NUaHJlYWRIYW5kbGVycz4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIENDSW5wdXRIYW5k
bGVyKiBpbml0aWFsaXplSW5wdXRIYW5kbGVyKENDSW5wdXRIYW5kbGVyQ2xpZW50KikgPSAwOwor
ICAgIHZpcnR1YWwgQ0NGcmFtZUhhbmRsZXIqIGluaXRpYWxpemVGcmFtZUhhbmRsZXIoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCB+Q0NUaHJlYWRIYW5kbGVycygpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ0NUaHJlYWRIYW5k
bGVycygpIHsgfQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAK
aW5kZXggOTk3M2E5NzRiMTU2N2JiNjY4MzEyNjAzNmVjZDQwNDMxZjAxMWZjYy4uOGVlNTM1YmQ0
MjhlODU4ZDdhNzljYjRlNmNjNWZhZWU1ODdhMzdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291
cmNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDRm9udEF0
bGFzLmgiCisjaW5jbHVkZSAiY2MvQ0NGcmFtZUhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0dyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiY2MvQ0NTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5Lmgi
CiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFk
SGFuZGxlcnMuaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtODE2LDggKzgx
OCwxMCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFk
ID0gQ0NTY2hlZHVsZXI6OmNyZWF0ZSh0aGlzLCBmcmFtZVJhdGVDb250cm9sbGVyLnJlbGVhc2Uo
KSk7CiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldFZpc2libGUobV9sYXllclRyZWVI
b3N0SW1wbC0+dmlzaWJsZSgpKTsKIAotICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkID0g
Q0NJbnB1dEhhbmRsZXI6OmNyZWF0ZShtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICBt
X2NvbXBvc2l0b3JJZGVudGlmaWVyID0gbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQtPmlkZW50
aWZpZXIoKTsKKyAgICBtX3RocmVhZEhhbmRsZXJzT25JbXBsVGhyZWFkID0gQ0NUaHJlYWRIYW5k
bGVyczo6Y3JlYXRlKCk7CisgICAgbV9jb21wb3NpdG9ySWRlbnRpZmllciA9IG1fdGhyZWFkSGFu
ZGxlcnNPbkltcGxUaHJlYWQtPmlkZW50aWZpZXIoKTsKKyAgICBtX2lucHV0SGFuZGxlck9uSW1w
bFRocmVhZCA9IG1fdGhyZWFkSGFuZGxlcnNPbkltcGxUaHJlYWQtPmluaXRpYWxpemVJbnB1dEhh
bmRsZXIobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgbV9mcmFtZUhhbmRsZXJPbklt
cGxUaHJlYWQgPSBtX3RocmVhZEhhbmRsZXJzT25JbXBsVGhyZWFkLT5pbml0aWFsaXplRnJhbWVI
YW5kbGVyKCk7CiAKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KQEAgLTg1MCw3ICs4NTQs
NyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkltcGxUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpbwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzV2VyZVB1cmdl
ZFNpbmNlTGFzdENvbW1pdCgpKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRl
bnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0
dXJlQWxsb2NhdG9yKCkpOwotICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLmNsZWFyKCk7
CisgICAgbV90aHJlYWRIYW5kbGVyc09uSW1wbFRocmVhZC5jbGVhcigpOwogICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC5jbGVhcigp
OwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4
IGUxMGMzZGNiMDg1ZTlkOTFiMDc2MWI0ODIyNzM4NzFmMTU1OWFjZGIuLjU3NDc3YThhYTk3MjU4
ZjFlOGE4ZDQ1MGNiNmJkY2EzZjk5MjUzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAg
LTM0LDEyICszNCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDRnJhbWVI
YW5kbGVyOwogY2xhc3MgQ0NJbnB1dEhhbmRsZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBj
bGFzcyBDQ1NjaGVkdWxlcjsKIGNsYXNzIENDU2NvcGVkVGhyZWFkUHJveHk7CiBjbGFzcyBDQ1Rl
eHR1cmVVcGRhdGVyOwogY2xhc3MgQ0NUaHJlYWQ7CitjbGFzcyBDQ1RocmVhZEhhbmRsZXJzOwog
Y2xhc3MgQ0NUaHJlYWRQcm94eUNvbnRleHRSZWNyZWF0aW9uVGltZXI7CiAKIGNsYXNzIENDVGhy
ZWFkUHJveHkgOiBwdWJsaWMgQ0NQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCwgQ0NT
Y2hlZHVsZXJDbGllbnQgewpAQCAtMTY0LDcgKzE2Niw5IEBAIHByaXZhdGU6CiAKICAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKIAotICAgIE93blB0
cjxDQ0lucHV0SGFuZGxlcj4gbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQ7CisgICAgT3duUHRy
PENDVGhyZWFkSGFuZGxlcnM+IG1fdGhyZWFkSGFuZGxlcnNPbkltcGxUaHJlYWQ7CisgICAgQ0NJ
bnB1dEhhbmRsZXIqIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkOworICAgIENDRnJhbWVIYW5k
bGVyKiBtX2ZyYW1lSGFuZGxlck9uSW1wbFRocmVhZDsKIAogICAgIE93blB0cjxDQ1NjaGVkdWxl
cj4gbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApp
bmRleCA3OGU0MjhiMjI4NWQzNjNlNTQ3OGRmN2ZhMjM4ZjM2ZjNlYmVmOTA3Li5iNGJkZjM1YTJh
ZTkzZmQzMWJiZWNkZWJlOGU2YWUzNDZiZTFmOTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCkBAIC0xMTQsOCArMTE0LDExIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21w
b3NpdGlvblVuZGVybGluZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0
b3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9yQ2xpZW50LmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlci5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudC5o
JywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0b3JUaHJlYWQuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkNvbnRlbnREZXRlY3Rpb25SZXN1bHQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaCcsCkBAIC00OTEsOCArNDk0LDEyIEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkNvbXBvc2l0b3JJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9y
SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJ
bXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRlbnRMYXllci5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
Q29udGVudExheWVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkNvbXBvc2l0b3IuaAppbmRleCA2ZTBkYTJiMjI3MGFiMTE3YWYxMTZjYTJkZDI0ODUyOGJhNGRh
NDlhLi43MDdhNWM3OWIzNzdmYzFkNmNlOGMxOWE0YWIwODE3ODVlYmYxZjBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvci5oCkBAIC0zMiw3ICszMiw2
IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJJbnB1dEV2ZW50OwogY2xhc3Mg
V2ViVGhyZWFkOwogCiAvLyBUaGlzIGNsYXNzIGNvbnRhaW5zIGdsb2JhbCByb3V0aW5lcyBmb3Ig
aW50ZXJhY3Rpbmcgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MDhhMDVl
MzFlNDM4OWQ5MDgxOTgyMWFkZmUyNzg5NTMyNzUzYjAyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlci5oCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJf
aAorI2RlZmluZSBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyX2gKKworI2luY2x1ZGUgInBsYXRm
b3JtL1dlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlckNsaWVudDsKKworLy8gQWxsIGNhbGxzIHRvIHRoZSBXZWJDb21wb3Np
dG9yRnJhbWVIYW5kbGVyIG11c3QgYmUgbWFkZSBmcm9tIHRoZQorLy8gY29tcG9zaXRvciB0aHJl
YWQuCitjbGFzcyBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2xpZW50KFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQqKSA9IDA7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyKCkg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVI
YW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgzMmU1ZTFkZGIxMDBmZGQ0MzRlMzVjNjc4M2Vi
NWEzOWI0YWUxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQuaApAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50X2gKKyNkZWZpbmUg
V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJDb21wb3NpdG9yRnJhbWU7CisKK2NsYXNzIFdlYkNvbXBvc2l0b3JGcmFtZUhh
bmRsZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIENhbGxiYWNrcyBpbnZva2VkIGZyb20gdGhl
IGNvbXBvc2l0b3IgdGhyZWFkLgorICAgIHZpcnR1YWwgdm9pZCB3aWxsU2h1dGRvd24oKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgb3V0cHV0Q29tcG9zaXRvckZyYW1lKGNvbnN0IFdlYktpdDo6
V2ViQ29tcG9zaXRvckZyYW1lJikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2Vi
Q29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oCmluZGV4IDU1N2RhNjc3MmNmMmMzMWIy
NTg2MTBhYzk4ODI5Yjc1M2E2NTU1MTAuLjNmZjU2MTAwMzYwMWMwNDk3ZjdjNmNkZWJkNjYyOTRk
YTA5ZmIxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyLmgKQEAgLTM0LDEyICszNCwxMCBAQCBjbGFzcyBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50OwogY2xhc3MgV2ViSW5wdXRFdmVudDsKIGNs
YXNzIFdlYlRocmVhZDsKIAotLy8gVGhpcyByZXByZXNlbnRzIHRoZSBjb21wb3NpdG9yIGFzc29j
aWF0ZWQgd2l0aCBhIFdlYldpZGdldC4gQWxsIGNhbGxzIHRvIHRoZSBXZWJDb21wb3NpdG9yIG11
c3QKKy8vIEFsbCBjYWxscyB0byB0aGUgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBtdXN0CiAv
LyBiZSBtYWRlIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgogY2xhc3MgV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyB0ZW1w
b3JhcmlseSBXZWJDb21wb3NpdG9yIHVudGlsIGFsbCBkb3duc3RyZWFtIGNvZGUKLSAgICAvLyBp
cyBzd2l0Y2hlZCB0byB1c2UgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci4KICAgICBXRUJLSVRf
RVhQT1JUIHN0YXRpYyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyKiBmcm9tSWRlbnRpZmllcihp
bnQpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyQ2xpZW50KikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQ29tcG9zaXRvclRocmVhZC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQ29tcG9zaXRvclRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYTU1NjYyY2I4MmNlODNhMzBhODdl
NTE1MmU1ZDE2ZGI1NTQxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yVGhyZWFkLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViQ29tcG9zaXRvclRocmVhZF9oCisjZGVmaW5lIFdlYkNvbXBvc2l0b3JUaHJl
YWRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOworY2xhc3MgV2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlcjsKKworLy8gR2l2ZW4gYSB0aHJlYWQgSUQsIHRoaXMgY2xhc3MgcHJv
dmlkZXMgYSBzZXQgb2YgInRlYXItb2ZmIiBoYW5kbGVycyBmb3IKKy8vIG1lc3NhZ2VzIHN1Y2gg
YXMgaW5wdXQgYW5kIHF1YWRsaXN0cy4gSXQgYWxsb3dzIGRpcmVjdCBjb21tdW5pY2F0aW9uIGJl
dHdlZW4KKy8vIHRoZSBpbXBsIHRocmVhZCBhbmQgdGhlIG91dHNpZGUgd29ybGQsIHdpdGhvdXQg
bmVlZGluZyB0byBnbyB0aHJvdWdoIHRoZSBtYWluCisvLyB0aHJlYWQuCisvLworLy8gQWxsIGNh
bGxzIHRvIFdlYkNvbXBvc2l0b3JUaHJlYWQgbXVzdCBiZSBtYWRlIGZyb20gdGhlIGltcGwgdGhy
ZWFkLgorY2xhc3MgV2ViQ29tcG9zaXRvclRocmVhZCB7CitwdWJsaWM6CisgICAgV0VCS0lUX0VY
UE9SVCBzdGF0aWMgV2ViQ29tcG9zaXRvclRocmVhZCogZnJvbUlkZW50aWZpZXIoaW50KTsKKwor
ICAgIHZpcnR1YWwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciogaW5wdXRIYW5kbGVyKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlciogZnJhbWVIYW5k
bGVyKCkgY29uc3QgPSAwOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKaW5kZXggODk0NTdjZTM4MjBjNDY3MTI4
MThiYzhmMWQ4MWU2ZTE2MGNlNjMxNy4uZjBmN2VhMTFiYTE3ODBiZWQxMGNiODRiNWQ0Yjg5NWU3
MjIzMTZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
Q2xpZW50LmgKQEAgLTU2LDEyICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
ZEF1dG9SZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkgeyB9CiAKICAgICAvLyBDYWxsZWQg
d2hlbiB0aGUgY29tcG9zaXRvciBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAgIC8vIFRoZSBp
bnB1dEhhbmRsZXJJZGVudGlmaWVyIGNhbiBiZSB1c2VkIG9uIHRoZSBjb21wb3NpdG9yIHRocmVh
ZCB0byBnZXQgYWNjZXNzCi0gICAgLy8gdG8gdGhlIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIg
aW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgV2ViV2lkZ2V0LgotICAgIC8vIElmIHRoZXJl
IGlzIG5vIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgV2Vi
V2lkZ2V0IChmb3IgZXhhbXBsZSBpZgotICAgIC8vIHRocmVhZGVkIGNvbXBvc2l0aW5nIGlzIG5v
dCBlbmFibGVkKSB0aGVuIGNhbGxpbmcgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlk
ZW50aWZpZXIoKQorICAgIC8vIFRoZSBjb21wb3NpdG9ySWRlbnRpZmllciBjYW4gYmUgdXNlZCBv
biB0aGUgY29tcG9zaXRvciB0aHJlYWQgdG8gZ2V0IGFjY2VzcworICAgIC8vIHRvIHRoZSBXZWJD
b21wb3NpdG9yVGhyZWFkIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFdlYldpZGdldC4K
KyAgICAvLyBJZiB0aGVyZSBpcyBubyBXZWJDb21wb3NpdG9yVGhyZWFkIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIFdlYldpZGdldCAoZm9yIGV4YW1wbGUgaWYKKyAgICAvLyB0aHJlYWRlZCBjb21wb3Np
dGluZyBpcyBub3QgZW5hYmxlZCkgdGhlbiBjYWxsaW5nIFdlYkNvbXBvc2l0b3JUaHJlYWQ6OmZy
b21JZGVudGlmaWVyKCkKICAgICAvLyBmb3IgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIHdpbGwg
cmV0dXJuIDAuCi0gICAgdmlydHVhbCB2b2lkIGRpZEFjdGl2YXRlQ29tcG9zaXRvcihpbnQgaW5w
dXRIYW5kbGVySWRlbnRpZmllcikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFjdGl2YXRlQ29t
cG9zaXRvcihpbnQgY29tcG9zaXRvcklkZW50aWZpZXIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBk
aWREZWFjdGl2YXRlQ29tcG9zaXRvcigpIHsgfQogCiAgICAgLy8gSW5kaWNhdGVzIHRvIHRoZSBl
bWJlZGRlciB0aGF0IHRoZSBjb21wb3NpdG9yIGlzIGFib3V0IHRvIGJlZ2luIGEKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JGcmFtZUhh
bmRsZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWY2NWE2NTdlMDVkYmYwNzE5MWZiOGFmZWRhMDcx
NjUwNjc1NTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yRnJhbWVIYW5k
bGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVudC5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bh
c3NPd25QdHI8V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGw+IFdlYkNvbXBvc2l0b3JGcmFt
ZUhhbmRsZXJJbXBsOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViQ29t
cG9zaXRvckZyYW1lSGFuZGxlckltcGwpOworfQorCitXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
SW1wbDo6V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwoKQorICAgIDogbV9jbGllbnQoMCkK
K3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworfQorCitXZWJDb21wb3Np
dG9yRnJhbWVIYW5kbGVySW1wbDo6fldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsKCkKK3sK
KyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPndpbGxTaHV0ZG93bigpOworfQorCit2b2lkIFdlYkNvbXBvc2l0
b3JGcmFtZUhhbmRsZXJJbXBsOjpzZXRDbGllbnQoV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNs
aWVudCogY2xpZW50KQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Cisg
ICAgLy8gSXQncyB2YWxpZCB0byBzZXQgYSBuZXcgY2xpZW50IGlmIHdlJ3ZlIG5ldmVyIGhhZCBv
bmUgb3IgdG8gY2xlYXIgdGhlIGNsaWVudCwgYnV0IGl0J3Mgbm90IHZhbGlkIHRvIGNoYW5nZSBm
cm9tIGhhdmluZyBvbmUgY2xpZW50IHRvIGEgZGlmZmVyZW50IG9uZS4KKyAgICBBU1NFUlQoIW1f
Y2xpZW50IHx8ICFjbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIFdl
YkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsOjpvdXRwdXRDb21wb3NpdG9yRnJhbWUoY29uc3Qg
V2ViS2l0OjpXZWJDb21wb3NpdG9yRnJhbWUmIGZyYW1lKQoreworICAgIG1fY2xpZW50LT5vdXRw
dXRDb21wb3NpdG9yRnJhbWUoZnJhbWUpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZWMyM2RlZTI2MTJmOTVmZDc1ZGQ5YjQwOTc2NmNiNjk5ZmEzNzEwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckZyYW1l
SGFuZGxlckltcGwuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb21wb3Np
dG9yRnJhbWVIYW5kbGVySW1wbF9oCisjZGVmaW5lIFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJ
bXBsX2gKKworI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIuaCIKKworI2luY2x1
ZGUgImNjL0NDRnJhbWVIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50
OworCitjbGFzcyBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21w
b3NpdG9yRnJhbWVIYW5kbGVyLCBwdWJsaWMgV2ViQ29yZTo6Q0NGcmFtZUhhbmRsZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1w
bD4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwo
KTsKKworICAgIC8vIFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIgaW1wbGVtZW50YXRpb24uCisg
ICAgdmlydHVhbCB2b2lkIHNldENsaWVudChXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50
Kik7CisKKyAgICAvLyBXZWJDb3JlOjpDQ0ZyYW1lSGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KKyAg
ICB2aXJ0dWFsIHZvaWQgb3V0cHV0Q29tcG9zaXRvckZyYW1lKGNvbnN0IFdlYktpdDo6V2ViQ29t
cG9zaXRvckZyYW1lJik7CisKK3ByaXZhdGU6CisgICAgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxl
ckltcGwoKTsKKworICAgIFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQqIG1fY2xpZW50
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbXBvc2l0b3JJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW1wbC5oCmluZGV4IDM0YzZiZDBmZGM2NzY0ZGIzYWRlZDJlMmU4Mzk1MzY4MzRm
YWEzN2UuLjMyNzVjOTc5MDcxYmI1YmY3MjVmNjhiYTVhYzYzNjg3ODc3MTVjN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuaApAQCAtMjgsOSAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogCi0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDVGhyZWFkOwpAQCAtNDYsNyAr
NDQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQoKTsKIAogcHJpdmF0
ZToKLQogICAgIGZyaWVuZCBjbGFzcyBXZWJDb21wb3NpdG9yOwogICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemUoV2ViVGhyZWFkKiBpbXBsVGhyZWFkKTsKICAgICBzdGF0aWMgdm9pZCBzaHV0ZG93
bigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCmluZGV4IDYzYmYyNzBmZTAyMjY0MzYwZjQyN2Ey
ZTIzYzYyOGNhZWExMTJjOTQuLjEzMzg0ODRjZGRlNGVhYjdmMjFhNDNiNTNlYjcxZDY4MGY1NjEz
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckltcGwuaCIKICNpbmNsdWRl
ICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViQ29tcG9z
aXRvclRocmVhZC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJL
aXQuaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKQEAgLTQzLDEx
ICs0NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhc3NPd25QdHI8Q0NJbnB1dEhhbmRsZXI+IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUoQ0NJ
bnB1dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCkKLXsKLSAgICByZXR1cm4gV2Vi
S2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKGlucHV0SGFuZGxlckNs
aWVudCk7Ci19Ci0KIGNsYXNzIFBsYXRmb3JtR2VzdHVyZVRvQ0NHZXN0dXJlQWRhcHRlciA6IHB1
YmxpYyBDQ0dlc3R1cmVDdXJ2ZSwgcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gY3JlYXRlKFBh
c3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IHBsYXRmb3JtQ3VydmUpCkBAIC04OCwzOCAr
ODQsMjYgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIFRoZXNlIHN0YXRp
Y3MgbWF5IG9ubHkgYmUgYWNjZXNzZWQgZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi1pbnQg
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OnNfbmV4dEF2YWlsYWJsZUlkZW50aWZpZXIg
PSAxOwotSGFzaFNldDxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCo+KiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6c19jb21wb3NpdG9ycyA9IDA7Ci0KLVdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXIqIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKGlu
dCBpZGVudGlmaWVyKQorUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4g
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShXZWJDb3JlOjpDQ0lucHV0SGFu
ZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50KQogewotICAgIHJldHVybiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6ZnJvbUlkZW50aWZpZXIoaWRlbnRpZmllcik7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChpbnB1dEhhbmRs
ZXJDbGllbnQpKTsKIH0KIAotUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bD4gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50KQorV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlciogV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50aWZpZXIoaW50IGlkZW50
aWZpZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbChpbnB1dEhhbmRsZXJDbGllbnQpKTsKKyAgICByZXR1cm4gV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKGlkZW50aWZpZXIpOwogfQogCiBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVyKiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6ZnJvbUlk
ZW50aWZpZXIoaW50IGlkZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKFdlYkNvbXBvc2l0b3JJbXBs
Ojppbml0aWFsaXplZCgpKTsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwot
Ci0gICAgaWYgKCFzX2NvbXBvc2l0b3JzKQorICAgIFdlYkNvbXBvc2l0b3JUaHJlYWQqIHRocmVh
ZCA9IFdlYkNvbXBvc2l0b3JUaHJlYWQ6OmZyb21JZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAg
IGlmICghdGhyZWFkKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAoSGFzaFNldDxXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCo+OjppdGVyYXRvciBpdCA9IHNfY29tcG9zaXRvcnMt
PmJlZ2luKCk7IGl0ICE9IHNfY29tcG9zaXRvcnMtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlm
ICgoKml0KS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpCi0gICAgICAgICAgICByZXR1cm4g
Kml0OwotICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGhyZWFkLT5pbnB1dEhhbmRs
ZXIoKTsKIH0KIAogV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQp
CiAgICAgOiBtX2NsaWVudCgwKQotICAgICwgbV9pZGVudGlmaWVyKHNfbmV4dEF2YWlsYWJsZUlk
ZW50aWZpZXIrKykKICAgICAsIG1faW5wdXRIYW5kbGVyQ2xpZW50KGlucHV0SGFuZGxlckNsaWVu
dCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2V4cGVjdFNjcm9sbFVwZGF0ZUVuZChmYWxzZSkK
QEAgLTEyOCwxMCArMTEyLDYgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKENDSW5wdXRIYW5kbGVyQ2xpZW4KICAgICAsIG1fZ2Vz
dHVyZVNjcm9sbFN0YXJ0ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKLQotICAgIGlmICghc19jb21wb3NpdG9ycykKLSAgICAgICAgc19jb21wb3NpdG9y
cyA9IG5ldyBIYXNoU2V0PFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKj47Ci0gICAgc19j
b21wb3NpdG9ycy0+YWRkKHRoaXMpOwogfQogCiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bDo6fldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKCkKQEAgLTEzOSwxMyArMTE5LDYgQEAg
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6On5XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbCgpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAobV9j
bGllbnQpCiAgICAgICAgIG1fY2xpZW50LT53aWxsU2h1dGRvd24oKTsKLQotICAgIEFTU0VSVChz
X2NvbXBvc2l0b3JzKTsKLSAgICBzX2NvbXBvc2l0b3JzLT5yZW1vdmUodGhpcyk7Ci0gICAgaWYg
KCFzX2NvbXBvc2l0b3JzLT5zaXplKCkpIHsKLSAgICAgICAgZGVsZXRlIHNfY29tcG9zaXRvcnM7
Ci0gICAgICAgIHNfY29tcG9zaXRvcnMgPSAwOwotICAgIH0KIH0KIAogdm9pZCBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6c2V0Q2xpZW50KFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJD
bGllbnQqIGNsaWVudCkKQEAgLTI5MiwxMiArMjY1LDYgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6
OmgKICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogfQogCi1pbnQgV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw6OmlkZW50aWZpZXIoKSBjb25zdAotewotICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7Ci0gICAgcmV0dXJuIG1faWRlbnRpZmllcjsKLX0KLQogdm9pZCBXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSkK
IHsKICAgICBpZiAoIW1fd2hlZWxGbGluZ0FuaW1hdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCmlu
ZGV4IDY0NjQ3MTA1YjAzYzcyZGRjNzZiOThmZTk5OGUyOGJjZTdmMjdkMzcuLmQ1ZGM5MWE2ZjU5
MGEwODJiYjkxZGFlNThkMWRhNzdkZWQyYzZkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaApAQCAt
NjQsNyArNjQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0RXZlbnQo
Y29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXIg
aW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIAogICAgIC8vIFdl
YkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0aW9uLgpAQCAtODgsNyArODcs
NiBAQCBwcml2YXRlOgogICAgIFdlYkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzIG1fd2hlZWxG
bGluZ1BhcmFtZXRlcnM7CiAKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50KiBt
X2NsaWVudDsKLSAgICBpbnQgbV9pZGVudGlmaWVyOwogICAgIFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyQ2xpZW50KiBtX2lucHV0SGFuZGxlckNsaWVudDsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTk2
LDExICs5NCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2V4cGVjdFBpbmNoVXBkYXRlRW5kOwog
I2VuZGlmCiAgICAgYm9vbCBtX2dlc3R1cmVTY3JvbGxTdGFydGVkOwotCi0gICAgc3RhdGljIGlu
dCBzX25leHRBdmFpbGFibGVJZGVudGlmaWVyOwotICAgIHN0YXRpYyBIYXNoU2V0PFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsKj4qIHNfY29tcG9zaXRvcnM7CiB9OwogCiB9CiAKLSNlbmRp
ZiAvLyBXZWJDb21wb3NpdG9ySW1wbF9oCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ZTlmYTU1ZThkNjIzYTczYWI1ZGNkNzMxZjg4NDk4YzE2NTgyMTE2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvclRocmVhZEltcGwuY3Bw
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvclRocmVhZEltcGwuaCIKKworI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JG
cmFtZUhhbmRsZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckltcGwuaCIKKyNpbmNs
dWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K1Bhc3NPd25QdHI8Q0NUaHJlYWRIYW5kbGVycz4gQ0NUaHJlYWRIYW5kbGVyczo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6Y3JlYXRlKCk7
Cit9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGVzZSBzdGF0aWNzIG1heSBvbmx5
IGJlIGFjY2Vzc2VkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgoraW50IFdlYkNvbXBvc2l0
b3JUaHJlYWRJbXBsOjpzX25leHRBdmFpbGFibGVJZGVudGlmaWVyID0gMTsKK0hhc2hTZXQ8V2Vi
Q29tcG9zaXRvclRocmVhZEltcGwqPiogV2ViQ29tcG9zaXRvclRocmVhZEltcGw6OnNfY29tcG9z
aXRvcnMgPSAwOworCitQYXNzT3duUHRyPFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsPiBXZWJDb21w
b3NpdG9yVGhyZWFkSW1wbDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdl
YkNvbXBvc2l0b3JUaHJlYWRJbXBsKTsKK30KKworV2ViQ29tcG9zaXRvclRocmVhZCogV2ViQ29t
cG9zaXRvclRocmVhZDo6ZnJvbUlkZW50aWZpZXIoaW50IGlkZW50aWZpZXIpCit7CisgICAgcmV0
dXJuIFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjpmcm9tSWRlbnRpZmllcihpZGVudGlmaWVyKTsK
K30KKworV2ViQ29tcG9zaXRvclRocmVhZCogV2ViQ29tcG9zaXRvclRocmVhZEltcGw6OmZyb21J
ZGVudGlmaWVyKGludCBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChXZWJDb21wb3NpdG9ySW1w
bDo6aW5pdGlhbGl6ZWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
KworICAgIGlmICghc19jb21wb3NpdG9ycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3Ig
KEhhc2hTZXQ8V2ViQ29tcG9zaXRvclRocmVhZEltcGwqPjo6aXRlcmF0b3IgaXQgPSBzX2NvbXBv
c2l0b3JzLT5iZWdpbigpOyBpdCAhPSBzX2NvbXBvc2l0b3JzLT5lbmQoKTsgKytpdCkgeworICAg
ICAgICBpZiAoKCppdCktPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyKQorICAgICAgICAgICAg
cmV0dXJuICppdDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK1dlYkNvbXBvc2l0b3JUaHJl
YWRJbXBsOjpXZWJDb21wb3NpdG9yVGhyZWFkSW1wbCgpCisgICAgOiBtX2lkZW50aWZpZXIoc19u
ZXh0QXZhaWxhYmxlSWRlbnRpZmllcisrKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CisKKyAgICBpZiAoIXNfY29tcG9zaXRvcnMpCisgICAgICAgIHNfY29tcG9zaXRv
cnMgPSBuZXcgSGFzaFNldDxXZWJDb21wb3NpdG9yVGhyZWFkSW1wbCo+OworICAgIHNfY29tcG9z
aXRvcnMtPmFkZCh0aGlzKTsKK30KKworV2ViQ29tcG9zaXRvclRocmVhZEltcGw6On5XZWJDb21w
b3NpdG9yVGhyZWFkSW1wbCgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKKworICAgIEFTU0VSVChzX2NvbXBvc2l0b3JzKTsKKyAgICBzX2NvbXBvc2l0b3JzLT5yZW1v
dmUodGhpcyk7CisgICAgaWYgKCFzX2NvbXBvc2l0b3JzLT5zaXplKCkpIHsKKyAgICAgICAgZGVs
ZXRlIHNfY29tcG9zaXRvcnM7CisgICAgICAgIHNfY29tcG9zaXRvcnMgPSAwOworICAgIH0KK30K
KworaW50IFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjppZGVudGlmaWVyKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVybiBtX2lkZW50aWZp
ZXI7Cit9CisKK0NDSW5wdXRIYW5kbGVyKiBXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6aW5pdGlh
bGl6ZUlucHV0SGFuZGxlcihDQ0lucHV0SGFuZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50
KQoreworICAgIG1faW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6
OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpOworICAgIHJldHVybiBtX2lucHV0SGFuZGxlci5n
ZXQoKTsKK30KKworQ0NGcmFtZUhhbmRsZXIqIFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjppbml0
aWFsaXplRnJhbWVIYW5kbGVyKCkKK3sKKyAgICBtX2ZyYW1lSGFuZGxlciA9IFdlYkNvbXBvc2l0
b3JGcmFtZUhhbmRsZXJJbXBsOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gbV9mcmFtZUhhbmRsZXIu
Z2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvclRocmVhZEltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYw
YTNiN2M1MTdkZTVkMTUyODBjNDQ2NGFkYTdhYjdhMjNkYmJkNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmgKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tcG9zaXRvclRocmVhZEltcGxfaAor
I2RlZmluZSBXZWJDb21wb3NpdG9yVGhyZWFkSW1wbF9oCisKKyNpbmNsdWRlICJXZWJDb21wb3Np
dG9yRnJhbWVIYW5kbGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvclRocmVhZC5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkSGFuZGxlcnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ29tcG9z
aXRvclRocmVhZEltcGwgOiBwdWJsaWMgV2ViQ29tcG9zaXRvclRocmVhZCwgcHVibGljIFdlYkNv
cmU6OkNDVGhyZWFkSGFuZGxlcnMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbXBv
c2l0b3JUaHJlYWRJbXBsKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJDb21w
b3NpdG9yVGhyZWFkSW1wbD4gY3JlYXRlKCk7CisgICAgc3RhdGljIFdlYkNvbXBvc2l0b3JUaHJl
YWQqIGZyb21JZGVudGlmaWVyKGludCk7CisgICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvclRocmVh
ZEltcGwoKTsKKworICAgIC8vIENDVGhyZWFkSGFuZGxlcnMgaW1wbGVtZW50YXRpb24KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyKiBpbml0aWFsaXplSW5wdXRIYW5kbGVyKFdl
YkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpDQ0Zy
YW1lSGFuZGxlciogaW5pdGlhbGl6ZUZyYW1lSGFuZGxlcigpOworICAgIHZpcnR1YWwgaW50IGlk
ZW50aWZpZXIoKSBjb25zdDsKKworICAgIC8vIFdlYkNvbXBvc2l0b3JUaHJlYWQgaW1wbGVtZW50
YXRpb24KKyAgICB2aXJ0dWFsIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIqIGlucHV0SGFuZGxl
cigpIGNvbnN0IHsgcmV0dXJuIGlucHV0SGFuZGxlci5nZXQoKTsgfQorICAgIHZpcnR1YWwgV2Vi
Q29tcG9zaXRvckZyYW1lSGFuZGxlciogZnJhbWVIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gZnJh
bWVIYW5kbGVyLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgV2ViQ29tcG9zaXRvclRocmVhZElt
cGwoKTsKKworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gbV9pbnB1
dEhhbmRsZXI7CisgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsPiBtX2Zy
YW1lSGFuZGxlcjsKKworICAgIGludCBtX2lkZW50aWZpZXI7CisgICAgc3RhdGljIGludCBzX25l
eHRBdmFpbGFibGVJZGVudGlmaWVyOworICAgIHN0YXRpYyBIYXNoU2V0PFdlYkNvbXBvc2l0b3JU
aHJlYWRJbXBsKj4qIHNfY29tcG9zaXRvcnM7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCmluZGV4IGQ1YjY4YTg2N2Y3ODJjYzY3ZmQxYjdiYzI5
NjIwNTI5MzRmZDcwOWYuLjkzZTZlOWU5MDgwZDRmZDk3MDcyMDBlOThlZjA2MjIxNzIyOTQ4Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9D
Q0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNp
bmNsdWRlICJjYy9DQ1RocmVhZEhhbmRsZXJzLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxv
YXRQb2ludC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCiAKQEAgLTEwMywxMyAr
MTA0LDE0IEBAIFRFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGZyb21JZGVudGlm
aWVyKQogCiAgICAgaW50IGNvbXBvc2l0b3JJZGVudGlmaWVyID0gLTE7CiAgICAgewotICAgICAg
ICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgICAgIGNvbXBvc2l0
b3JJZGVudGlmaWVyID0gaW5wdXRIYW5kbGVyLT5pZGVudGlmaWVyKCk7CisgICAgICAgIE93blB0
cjxXZWJDb3JlOjpDQ1RocmVhZEhhbmRsZXJzPiB0aHJlYWQgPSBXZWJDb3JlOjpDQ1RocmVhZEhh
bmRsZXJzOjpjcmVhdGUoKTsKKyAgICAgICAgY29tcG9zaXRvcklkZW50aWZpZXIgPSB0aHJlYWQt
PmlkZW50aWZpZXIoKTsKKyAgICAgICAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwqIGlu
cHV0SGFuZGxlciA9IHN0YXRpY19jYXN0PFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKj4o
dGhyZWFkLT5pbml0aWFsaXplSW5wdXRIYW5kbGVyKDApKTsKICAgICAgICAgLy8gVGhlIGNvbXBv
c2l0b3Igd2UganVzdCBjcmVhdGVkIHNob3VsZCBiZSBsb2NhdGFibGUuCi0gICAgICAgIEVYUEVD
VF9FUShpbnB1dEhhbmRsZXIuZ2V0KCksIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21J
ZGVudGlmaWVyKGNvbXBvc2l0b3JJZGVudGlmaWVyKSk7CisgICAgICAgIEVYUEVDVF9FUShpbnB1
dEhhbmRsZXIsIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKGNvbXBv
c2l0b3JJZGVudGlmaWVyKSk7CiAKICAgICAgICAgLy8gQnV0IG5vdGhpbmcgZWxzZS4KLSAgICAg
ICAgRVhQRUNUX0VRKDAsIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVy
KGlucHV0SGFuZGxlci0+aWRlbnRpZmllcigpICsgMTApKTsKKyAgICAgICAgRVhQRUNUX0VRKDAs
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKHRocmVhZC0+aWRlbnRp
ZmllcigpICsgMTApKTsKICAgICB9CiAKICAgICAvLyBBZnRlciB0aGUgY29tcG9zaXRvciBpcyBk
ZXN0cm95ZWQsIGl0cyBlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtYXAuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151168</attachid>
            <date>2012-07-08 19:03:31 -0700</date>
            <delta_ts>2012-08-01 20:03:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90736-20120708190330.patch</filename>
            <type>text/plain</type>
            <size>48222</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjUyNWNkNmEzOGZjNzc2
ZjBlODRmNzQ4MDVkZGY4MjQwMDMwMzRiOC4uM2Q1NWY5ODIzN2I2Y2Y3MjNjYjc0NThmNThmNjk1
NGFlMWQ2OWI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA3LTA4ICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIEdl
bmVyYWxpemUgaW5wdXQgaGFuZGxlciBtZXNzYWdpbmcgZm9yIHViZXJjb21wb3NpdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFViZXJjb21wb3NpdG9y
IHdpbGwgcmVxdWlyZSBzZW5kaW5nIG91dCBkYXRhIGZyb20gdGhlIGNvbXBvc2l0b3IKKyAgICAg
ICAgdGhyZWFkIHRvIENocm9taXVtLCB3aXRob3V0IHRvdWNoaW5nIHRoZSBtYWluIHRocmVhZC4g
IFRoaXMgaXMgc2ltaWxhcgorICAgICAgICB0byB3aGF0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXIgYWxyZWFkeSBkb2VzIC0tIGl0IGhhcyBhIHNjaGVtZSBmb3IKKyAgICAgICAgZXN0YWJsaXNo
aW5nIGEgImNvbm5lY3Rpb24iIGJhc2VkIG9uIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGEgY29tcG9z
aXRvcgorICAgICAgICBJRCBudW1iZXIuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgSSBzcGxp
dCBvZmYgdGhlIGlucHV0IGhhbmRsZXIncyBjb25uZWN0aW9uLWVzdGFibGlzaGluZworICAgICAg
ICBsb2dpYyBpbnRvIGEgbmV3IHNldCBvZiBjbGFzc2VzICJXZWJDb21wb3NpdG9yVGhyZWFkIi4K
KyAgICAgICAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBub3cgaXMgbW9yZSBwdXJlbHkgZm9j
dXNlZCBvbiBpbnB1dCBoYW5kbGluZworICAgICAgICBhbmQgaXMgb3duZWQgYnkgV2ViQ29tcG9z
aXRvclRocmVhZC4gIEkgdGhlbiBjcmVhdGVkIGFub3RoZXIgY2xhc3MKKyAgICAgICAgIldlYkNv
bXBvc2l0b3JGcmFtZUhhbmRsZXIiIHRvIGJlIHVzZWQgYnkgdGhlIHViZXJjb21wb3NpdG9yIGFu
ZCB0YWtpbmcKKyAgICAgICAgYWR2YW50YWdlIG9mIHRoZSBzYW1lIGNhcGFiaWxpdGllcy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIChOby1vcCByZWZhY3RvcmluZy4pCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NG
cmFtZUhhbmRsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29tcG9zaXRvckltcGwuaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKENDRnJhbWVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVIYW5k
bGVyOjp+Q0NGcmFtZUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZUhhbmRsZXI6
OkNDRnJhbWVIYW5kbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0lucHV0SGFuZGxlci5oOgorICAgICAgICAoQ0NJbnB1dEhhbmRsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkSGFuZGxlcnMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuaC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NUaHJlYWRIYW5kbGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZEhhbmRsZXJzOjp+Q0NUaHJlYWRIYW5kbGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZEhhbmRsZXJzOjpDQ1RocmVhZEhhbmRsZXJzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkltcGxU
aHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NUaHJlYWRQcm94eSk6CisK
IDIwMTItMDctMDggIFZpdmVrIEdhbGF0YWdlICA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBzaG91bGQg
bm90IGdlbmVyYXRlIHN0YXRlbWVudHMgd2l0aCBubyBlZmZlY3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggNzM4NDk0MDQ3MGJmZDMyOTM0YTdjNDk3ZGE1OWVkNTNjNWQ0ZTRiMi4uOTU0
YjZiNjhmMjM3MzdhMzRlY2VlMDFkMTYzM2MzZDE1Y2UxNmIyNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw4MCBAQAorMjAxMi0wNy0wOCAgQWxleGFuZHJlIEVsaWFzICA8
YWVsaWFzQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBHZW5lcmFsaXplIGlucHV0
IGhhbmRsZXIgbWVzc2FnaW5nIGZvciB1YmVyY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVYmVyY29tcG9zaXRvciB3aWxsIHJlcXVpcmUg
c2VuZGluZyBvdXQgZGF0YSBmcm9tIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHRocmVhZCB0byBD
aHJvbWl1bSwgd2l0aG91dCB0b3VjaGluZyB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIHNpbWls
YXIKKyAgICAgICAgdG8gd2hhdCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIGFscmVhZHkgZG9l
cyAtLSBpdCBoYXMgYSBzY2hlbWUgZm9yCisgICAgICAgIGVzdGFibGlzaGluZyBhICJjb25uZWN0
aW9uIiBiYXNlZCBvbiBzdGF0aWMgdmFyaWFibGVzIGFuZCBhIGNvbXBvc2l0b3IKKyAgICAgICAg
SUQgbnVtYmVyLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgc3BsaXQgb2ZmIHRoZSBpbnB1
dCBoYW5kbGVyJ3MgY29ubmVjdGlvbi1lc3RhYmxpc2hpbmcKKyAgICAgICAgbG9naWMgaW50byBh
IG5ldyBzZXQgb2YgY2xhc3NlcyAiV2ViQ29tcG9zaXRvclRocmVhZCIuCisgICAgICAgIFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXIgbm93IGlzIG1vcmUgcHVyZWx5IGZvY3VzZWQgb24gaW5wdXQg
aGFuZGxpbmcKKyAgICAgICAgYW5kIGlzIG93bmVkIGJ5IFdlYkNvbXBvc2l0b3JUaHJlYWQuICBJ
IHRoZW4gY3JlYXRlZCBhbm90aGVyIGNsYXNzCisgICAgICAgICJXZWJDb21wb3NpdG9yRnJhbWVI
YW5kbGVyIiB0byBiZSB1c2VkIGJ5IHRoZSB1YmVyY29tcG9zaXRvciBhbmQgdGFraW5nCisgICAg
ICAgIGFkdmFudGFnZSBvZiB0aGUgc2FtZSBjYXBhYmlsaXRpZXMuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdG9yLmg6CisgICAgICAgICogcHVi
bGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuaC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRvckZyYW1lSGFuZGxlcjo6fldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIpOgorICAg
ICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50Lmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmguCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQ6On5XZWJD
b21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlci5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBwdWJsaWMv
V2ViQ29tcG9zaXRvclRocmVhZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb21wb3NpdG9ySW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkNvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXRDbGllbnQuaDoK
KyAgICAgICAgKFdlYldpZGdldENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENs
aWVudDo6ZGlkQWN0aXZhdGVDb21wb3NpdG9yKToKKyAgICAgICAgKiBzcmMvV2ViQ29tcG9zaXRv
ckZyYW1lSGFuZGxlckltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb21wb3NpdG9ySW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsOjpXZWJDb21wb3NpdG9yRnJhbWVI
YW5kbGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJ
bXBsOjp+V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbDo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGw6Om91dHB1dENvbXBvc2l0b3JGcmFtZSk6
CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmguCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW1wbC5oOgorICAgICAgICAoV2ViQ29tcG9zaXRv
ckltcGwpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9tSWRlbnRp
Zmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpm
cm9tSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsOjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjp+V2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOgorICAgICAgICAqIHNyYy9X
ZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRIYW5kbGVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21wb3NpdG9yVGhyZWFkOjpmcm9tSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0b3JUaHJlYWRJbXBsOjpmcm9tSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjpXZWJDb21wb3NpdG9yVGhyZWFkSW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjp+V2ViQ29tcG9zaXRvclRocmVh
ZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6aWRlbnRp
Zmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjppbml0aWFs
aXplSW5wdXRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclRocmVhZElt
cGw6OmluaXRpYWxpemVGcmFtZUhhbmRsZXIpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9y
VGhyZWFkSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkNvbXBvc2l0
b3JUaHJlYWRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGw6
OmlucHV0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JUaHJlYWRJbXBs
OjpmcmFtZUhhbmRsZXIpOgorICAgICAgICAqIHRlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorCiAyMDEyLTA3LTA1ICBZ
b3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCBDaHJvbWl1bSBnYXJkZW5pbmcuIFJvbGwgQ2hyb21pdW0gREVQUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IGVmYTQzYzc4NTgxMmI0MTFjZGRlMDlmOTBkZTlmOWRjNjNlZTdlNDkuLjE4MmVkMTkxY2Jm
NTc5YTk2OWY3ZGQ1NThjMzE4NGYyMTFmZDJkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgyOTYs
NiArODI5Niw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0ZvbnRBdGxhcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRm9udEF0bGFzLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRnJhbWVIYW5kbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNv
dW50ZXIuY3BwJywKQEAgLTgzODIsNiArODM4Myw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRIYW5kbGVycy5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFRhc2suaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lSGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZUhhbmRsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ZmE0NWRiM2VhMGJmMTg2MTlkODAzNzYyMzk5NjA2ZDgwY2UxZmE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZUhh
bmRsZXIuaApAQCAtMCwwICsxLDQ4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NGcmFtZUhhbmRs
ZXJfaAorI2RlZmluZSBDQ0ZyYW1lSGFuZGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb21wb3NpdG9yRnJhbWU7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NGcmFtZUhhbmRsZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENDRnJhbWVIYW5kbGVyKTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5DQ0ZyYW1lSGFuZGxlcigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG91dHB1dENvbXBvc2l0
b3JGcmFtZShjb25zdCBXZWJLaXQ6OldlYkNvbXBvc2l0b3JGcmFtZSYpID0gMDsKKworcHJvdGVj
dGVkOgorICAgIENDRnJhbWVIYW5kbGVyKCkgeyB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSW5wdXRIYW5kbGVyLmgKaW5kZXggNzdkZDJkYmNmNzRiNzdmODAyNzFjZWM0ZjI1YmE3MWMw
NTBmZjJiYS4uMTM1NWJmOGIwNWY5NTVjMmFmZDkyNzZkNTY2MWVhZmJmMWMwMjA0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1
dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0lucHV0SGFuZGxlci5oCkBAIC04OSwxMCArODksOCBAQCBwcm90ZWN0ZWQ6CiBjbGFz
cyBDQ0lucHV0SGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NJbnB1dEhhbmRs
ZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBjcmVh
dGUoQ0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlcigp
IHsgfQogCi0gICAgdmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSkgPSAwOwogCiBwcm90ZWN0ZWQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZEhhbmRsZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZEhhbmRsZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDcyYjZiM2Q1YWZmNDJj
NWUxMDFlMWVkYjY0N2YzMDQ5M2JhYjc1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkSGFuZGxlcnMuaApAQCAt
MCwwICsxLDU0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUaHJlYWRIYW5kbGVyc19oCisjZGVm
aW5lIENDVGhyZWFkSGFuZGxlcnNfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ0lucHV0SGFuZGxlcjsKK2NsYXNzIENDSW5wdXRIYW5kbGVyQ2xpZW50OworY2xhc3MgQ0NG
cmFtZUhhbmRsZXI7CisKK2NsYXNzIENDVGhyZWFkSGFuZGxlcnMgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDVGhyZWFkSGFuZGxlcnMpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDVGhyZWFkSGFuZGxlcnM+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCBDQ0lucHV0SGFu
ZGxlciogaW5pdGlhbGl6ZUlucHV0SGFuZGxlcihDQ0lucHV0SGFuZGxlckNsaWVudCopID0gMDsK
KyAgICB2aXJ0dWFsIENDRnJhbWVIYW5kbGVyKiBpbml0aWFsaXplRnJhbWVIYW5kbGVyKCkgPSAw
OworCisgICAgdmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgfkNDVGhyZWFkSGFuZGxlcnMoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIENDVGhyZWFkSGFu
ZGxlcnMoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3Bw
CmluZGV4IDk5NzNhOTc0YjE1NjdiYjY2ODMxMjYwMzZlY2Q0MDQzMWYwMTFmY2MuLjhlZTUzNWJk
NDI4ZTg1OGQ3YTc5Y2I0ZTZjYzVmYWVlNTg3YTM3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiY2MvQ0NEZWxheUJhc2VkVGltZVNv
dXJjZS5oIgogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0ZvbnRB
dGxhcy5oIgorI2luY2x1ZGUgImNjL0NDRnJhbWVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NG
cmFtZVJhdGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1
ZGUgImNjL0NDU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5o
IgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZEhhbmRsZXJzLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTgxNiw4ICs4
MTgsMTAgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1wbFRocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVh
ZCA9IENDU2NoZWR1bGVyOjpjcmVhdGUodGhpcywgZnJhbWVSYXRlQ29udHJvbGxlci5yZWxlYXNl
KCkpOwogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5zZXRWaXNpYmxlKG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnZpc2libGUoKSk7CiAKLSAgICBtX2lucHV0SGFuZGxlck9uSW1wbFRocmVhZCA9
IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAg
bV9jb21wb3NpdG9ySWRlbnRpZmllciA9IG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLT5pZGVu
dGlmaWVyKCk7CisgICAgbV90aHJlYWRIYW5kbGVyc09uSW1wbFRocmVhZCA9IENDVGhyZWFkSGFu
ZGxlcnM6OmNyZWF0ZSgpOworICAgIG1fY29tcG9zaXRvcklkZW50aWZpZXIgPSBtX3RocmVhZEhh
bmRsZXJzT25JbXBsVGhyZWFkLT5pZGVudGlmaWVyKCk7CisgICAgbV9pbnB1dEhhbmRsZXJPbklt
cGxUaHJlYWQgPSBtX3RocmVhZEhhbmRsZXJzT25JbXBsVGhyZWFkLT5pbml0aWFsaXplSW5wdXRI
YW5kbGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIG1fZnJhbWVIYW5kbGVyT25J
bXBsVGhyZWFkID0gbV90aHJlYWRIYW5kbGVyc09uSW1wbFRocmVhZC0+aW5pdGlhbGl6ZUZyYW1l
SGFuZGxlcigpOwogCiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CkBAIC04NTAsNyArODU0
LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW8KICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwogICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1dlcmVQdXJn
ZWRTaW5jZUxhc3RDb21taXQoKSkKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250
ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4
dHVyZUFsbG9jYXRvcigpKTsKLSAgICBtX2lucHV0SGFuZGxlck9uSW1wbFRocmVhZC5jbGVhcigp
OworICAgIG1fdGhyZWFkSGFuZGxlcnNPbkltcGxUaHJlYWQuY2xlYXIoKTsKICAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQuY2xlYXIo
KTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRl
eCBlMTBjM2RjYjA4NWU5ZDkxYjA3NjFiNDgyMjczODcxZjE1NTlhY2RiLi41NzQ3N2E4YWE5NzI1
OGYxZThhOGQ0NTBjYjZiZGNhM2Y5OTI1MzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBA
IC0zNCwxMiArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0ZyYW1l
SGFuZGxlcjsKIGNsYXNzIENDSW5wdXRIYW5kbGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0Owog
Y2xhc3MgQ0NTY2hlZHVsZXI7CiBjbGFzcyBDQ1Njb3BlZFRocmVhZFByb3h5OwogY2xhc3MgQ0NU
ZXh0dXJlVXBkYXRlcjsKIGNsYXNzIENDVGhyZWFkOworY2xhc3MgQ0NUaHJlYWRIYW5kbGVyczsK
IGNsYXNzIENDVGhyZWFkUHJveHlDb250ZXh0UmVjcmVhdGlvblRpbWVyOwogCiBjbGFzcyBDQ1Ro
cmVhZFByb3h5IDogcHVibGljIENDUHJveHksIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQsIEND
U2NoZWR1bGVyQ2xpZW50IHsKQEAgLTE2NCw3ICsxNjYsOSBAQCBwcml2YXRlOgogCiAgICAgT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CiAKLSAgICBPd25Q
dHI8Q0NJbnB1dEhhbmRsZXI+IG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkOworICAgIE93blB0
cjxDQ1RocmVhZEhhbmRsZXJzPiBtX3RocmVhZEhhbmRsZXJzT25JbXBsVGhyZWFkOworICAgIEND
SW5wdXRIYW5kbGVyKiBtX2lucHV0SGFuZGxlck9uSW1wbFRocmVhZDsKKyAgICBDQ0ZyYW1lSGFu
ZGxlciogbV9mcmFtZUhhbmRsZXJPbkltcGxUaHJlYWQ7CiAKICAgICBPd25QdHI8Q0NTY2hlZHVs
ZXI+IG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
aW5kZXggMmZlZWNjNzM4OWQzYzU4MWQ0ZjQzZmI5NDQ2MDJlM2IwN2Q1MzI1My4uNjQxZDA5ZGQ2
YzA0ZmM1M2I1M2JkNmRjYTBjYzMzMWQ5N2I5MTU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMTE0LDggKzExNCwxMSBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29t
cG9zaXRpb25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3Np
dG9yLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvckNsaWVudC5oJywK
KyAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9yVGhyZWFkLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29uc29sZU1lc3NhZ2UuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJDb250ZW50RGV0ZWN0aW9uUmVzdWx0LmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgnLApAQCAtNDk0LDggKzQ5NywxMiBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJDb21wb3NpdG9ySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRv
ckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxl
ckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRvclRocmVhZEltcGwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDb21wb3NpdG9yLmgKaW5kZXggNmUwZGEyYjIyNzBhYjExN2FmMTE2Y2EyZGQyNDg1MjhiYTRk
YTQ5YS4uNzA3YTVjNzliMzc3ZmMxZDZjZThjMTlhNGFiMDgxNzg1ZWJmMWYwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3IuaApAQCAtMzIsNyArMzIs
NiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViSW5wdXRFdmVudDsKIGNsYXNz
IFdlYlRocmVhZDsKIAogLy8gVGhpcyBjbGFzcyBjb250YWlucyBnbG9iYWwgcm91dGluZXMgZm9y
IGludGVyYWN0aW5nIHdpdGggdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA4YTA1
ZTMxZTQzODlkOTA4MTk4MjFhZGZlMjc4OTUzMjc1M2IwMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIuaApA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
X2gKKyNkZWZpbmUgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlcl9oCisKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNvbXBv
c2l0b3JGcmFtZUhhbmRsZXJDbGllbnQ7CisKKy8vIEFsbCBjYWxscyB0byB0aGUgV2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlciBtdXN0IGJlIG1hZGUgZnJvbSB0aGUKKy8vIGNvbXBvc2l0b3IgdGhy
ZWFkLgorY2xhc3MgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIHNldENsaWVudChXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50KikgPSAw
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlcigp
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvckZyYW1l
SGFuZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MzJlNWUxZGRiMTAwZmRkNDM0ZTM1YzY3ODNl
YjVhMzliNGFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50LmgKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVudF9oCisjZGVmaW5l
IFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViQ29tcG9zaXRvckZyYW1lOworCitjbGFzcyBXZWJDb21wb3NpdG9yRnJhbWVI
YW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDYWxsYmFja3MgaW52b2tlZCBmcm9tIHRo
ZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNodXRkb3duKCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIG91dHB1dENvbXBvc2l0b3JGcmFtZShjb25zdCBXZWJLaXQ6
OldlYkNvbXBvc2l0b3JGcmFtZSYpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldl
YkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIuaAppbmRleCA1NTdkYTY3NzJjZjJjMzFi
MjU4NjEwYWM5ODgyOWI3NTNhNjU1NTEwLi4zZmY1NjEwMDM2MDFjMDQ5N2Y3YzZjZGViZDY2Mjk0
ZGEwOWZiMTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oCkBAIC0zNCwxMiArMzQsMTAgQEAgY2xhc3Mg
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudDsKIGNsYXNzIFdlYklucHV0RXZlbnQ7CiBj
bGFzcyBXZWJUaHJlYWQ7CiAKLS8vIFRoaXMgcmVwcmVzZW50cyB0aGUgY29tcG9zaXRvciBhc3Nv
Y2lhdGVkIHdpdGggYSBXZWJXaWRnZXQuIEFsbCBjYWxscyB0byB0aGUgV2ViQ29tcG9zaXRvciBt
dXN0CisvLyBBbGwgY2FsbHMgdG8gdGhlIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgbXVzdAog
Ly8gYmUgbWFkZSBmcm9tIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KIGNsYXNzIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXIgewogcHVibGljOgotICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgdGVt
cG9yYXJpbHkgV2ViQ29tcG9zaXRvciB1bnRpbCBhbGwgZG93bnN0cmVhbSBjb2RlCi0gICAgLy8g
aXMgc3dpdGNoZWQgdG8gdXNlIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIuCiAgICAgV0VCS0lU
X0VYUE9SVCBzdGF0aWMgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciogZnJvbUlkZW50aWZpZXIo
aW50KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckNsaWVudCopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbXBvc2l0b3JUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkNvbXBvc2l0b3JUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmE1NTY2MmNiODJjZTgzYTMwYTg3
ZTUxNTJlNWQxNmRiNTU0MWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvclRocmVhZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYkNvbXBvc2l0b3JUaHJlYWRfaAorI2RlZmluZSBXZWJDb21wb3NpdG9yVGhy
ZWFkX2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjsKK2NsYXNzIFdlYkNvbXBv
c2l0b3JGcmFtZUhhbmRsZXI7CisKKy8vIEdpdmVuIGEgdGhyZWFkIElELCB0aGlzIGNsYXNzIHBy
b3ZpZGVzIGEgc2V0IG9mICJ0ZWFyLW9mZiIgaGFuZGxlcnMgZm9yCisvLyBtZXNzYWdlcyBzdWNo
IGFzIGlucHV0IGFuZCBxdWFkbGlzdHMuIEl0IGFsbG93cyBkaXJlY3QgY29tbXVuaWNhdGlvbiBi
ZXR3ZWVuCisvLyB0aGUgaW1wbCB0aHJlYWQgYW5kIHRoZSBvdXRzaWRlIHdvcmxkLCB3aXRob3V0
IG5lZWRpbmcgdG8gZ28gdGhyb3VnaCB0aGUgbWFpbgorLy8gdGhyZWFkLgorLy8KKy8vIEFsbCBj
YWxscyB0byBXZWJDb21wb3NpdG9yVGhyZWFkIG11c3QgYmUgbWFkZSBmcm9tIHRoZSBpbXBsIHRo
cmVhZC4KK2NsYXNzIFdlYkNvbXBvc2l0b3JUaHJlYWQgeworcHVibGljOgorICAgIFdFQktJVF9F
WFBPUlQgc3RhdGljIFdlYkNvbXBvc2l0b3JUaHJlYWQqIGZyb21JZGVudGlmaWVyKGludCk7CisK
KyAgICB2aXJ0dWFsIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIqIGlucHV0SGFuZGxlcigpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXIqIGZyYW1lSGFu
ZGxlcigpIGNvbnN0ID0gMDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4IDg5NDU3Y2UzODIwYzQ2NzEy
ODE4YmM4ZjFkODFlNmUxNjBjZTYzMTcuLmYwZjdlYTExYmExNzgwYmVkMTBjYjg0YjVkNGI4OTVl
NzIyMzE2ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldp
ZGdldENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdl
dENsaWVudC5oCkBAIC01NiwxMiArNTYsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRBdXRvUmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpIHsgfQogCiAgICAgLy8gQ2FsbGVk
IHdoZW4gdGhlIGNvbXBvc2l0b3IgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgICAvLyBUaGUg
aW5wdXRIYW5kbGVySWRlbnRpZmllciBjYW4gYmUgdXNlZCBvbiB0aGUgY29tcG9zaXRvciB0aHJl
YWQgdG8gZ2V0IGFjY2VzcwotICAgIC8vIHRvIHRoZSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFdlYldpZGdldC4KLSAgICAvLyBJZiB0aGVy
ZSBpcyBubyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFdl
YldpZGdldCAoZm9yIGV4YW1wbGUgaWYKLSAgICAvLyB0aHJlYWRlZCBjb21wb3NpdGluZyBpcyBu
b3QgZW5hYmxlZCkgdGhlbiBjYWxsaW5nIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21J
ZGVudGlmaWVyKCkKKyAgICAvLyBUaGUgY29tcG9zaXRvcklkZW50aWZpZXIgY2FuIGJlIHVzZWQg
b24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkIHRvIGdldCBhY2Nlc3MKKyAgICAvLyB0byB0aGUgV2Vi
Q29tcG9zaXRvclRocmVhZCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBXZWJXaWRnZXQu
CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gV2ViQ29tcG9zaXRvclRocmVhZCBhc3NvY2lhdGVkIHdp
dGggdGhpcyBXZWJXaWRnZXQgKGZvciBleGFtcGxlIGlmCisgICAgLy8gdGhyZWFkZWQgY29tcG9z
aXRpbmcgaXMgbm90IGVuYWJsZWQpIHRoZW4gY2FsbGluZyBXZWJDb21wb3NpdG9yVGhyZWFkOjpm
cm9tSWRlbnRpZmllcigpCiAgICAgLy8gZm9yIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciB3aWxs
IHJldHVybiAwLgotICAgIHZpcnR1YWwgdm9pZCBkaWRBY3RpdmF0ZUNvbXBvc2l0b3IoaW50IGlu
cHV0SGFuZGxlcklkZW50aWZpZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRBY3RpdmF0ZUNv
bXBvc2l0b3IoaW50IGNvbXBvc2l0b3JJZGVudGlmaWVyKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRGVhY3RpdmF0ZUNvbXBvc2l0b3IoKSB7IH0KIAogICAgIC8vIEluZGljYXRlcyB0byB0aGUg
ZW1iZWRkZXIgdGhhdCB0aGUgY29tcG9zaXRvciBpcyBhYm91dCB0byBiZWdpbiBhCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yRnJhbWVI
YW5kbGVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFmNjVhNjU3ZTA1ZGJmMDcxOTFmYjhhZmVkYTA3
MTY1MDY3NTU3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckZyYW1lSGFu
ZGxlckltcGwuaCIKKworI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJDbGllbnQu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQ
YXNzT3duUHRyPFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsPiBXZWJDb21wb3NpdG9yRnJh
bWVIYW5kbGVySW1wbDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkNv
bXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsKTsKK30KKworV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxl
ckltcGw6OldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsKCkKKyAgICA6IG1fY2xpZW50KDAp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKK30KKworV2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlckltcGw6On5XZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbCgpCit7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT53aWxsU2h1dGRvd24oKTsKK30KKwordm9pZCBXZWJDb21wb3Np
dG9yRnJhbWVIYW5kbGVySW1wbDo6c2V0Q2xpZW50KFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwor
ICAgIC8vIEl0J3MgdmFsaWQgdG8gc2V0IGEgbmV3IGNsaWVudCBpZiB3ZSd2ZSBuZXZlciBoYWQg
b25lIG9yIHRvIGNsZWFyIHRoZSBjbGllbnQsIGJ1dCBpdCdzIG5vdCB2YWxpZCB0byBjaGFuZ2Ug
ZnJvbSBoYXZpbmcgb25lIGNsaWVudCB0byBhIGRpZmZlcmVudCBvbmUuCisgICAgQVNTRVJUKCFt
X2NsaWVudCB8fCAhY2xpZW50KTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKK30KKwordm9pZCBX
ZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbDo6b3V0cHV0Q29tcG9zaXRvckZyYW1lKGNvbnN0
IFdlYktpdDo6V2ViQ29tcG9zaXRvckZyYW1lJiBmcmFtZSkKK3sKKyAgICBtX2NsaWVudC0+b3V0
cHV0Q29tcG9zaXRvckZyYW1lKGZyYW1lKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmVjMjNkZWUyNjEyZjk1ZmQ3NWRkOWI0MDk3NjZjYjY5OWZhMzcxMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JGcmFt
ZUhhbmRsZXJJbXBsLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlckltcGxfaAorI2RlZmluZSBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVy
SW1wbF9oCisKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyLmgiCisKKyNpbmNs
dWRlICJjYy9DQ0ZyYW1lSGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVu
dDsKKworY2xhc3MgV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGwgOiBwdWJsaWMgV2ViQ29t
cG9zaXRvckZyYW1lSGFuZGxlciwgcHVibGljIFdlYkNvcmU6OkNDRnJhbWVIYW5kbGVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVySW1wbCk7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlcklt
cGw+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgfldlYkNvbXBvc2l0b3JGcmFtZUhhbmRsZXJJbXBs
KCk7CisKKyAgICAvLyBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyIGltcGxlbWVudGF0aW9uLgor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoV2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckNsaWVu
dCopOworCisgICAgLy8gV2ViQ29yZTo6Q0NGcmFtZUhhbmRsZXIgaW1wbGVtZW50YXRpb24uCisg
ICAgdmlydHVhbCB2b2lkIG91dHB1dENvbXBvc2l0b3JGcmFtZShjb25zdCBXZWJLaXQ6OldlYkNv
bXBvc2l0b3JGcmFtZSYpOworCitwcml2YXRlOgorICAgIFdlYkNvbXBvc2l0b3JGcmFtZUhhbmRs
ZXJJbXBsKCk7CisKKyAgICBXZWJDb21wb3NpdG9yRnJhbWVIYW5kbGVyQ2xpZW50KiBtX2NsaWVu
dDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb21wb3NpdG9ySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29tcG9zaXRvckltcGwuaAppbmRleCAzNGM2YmQwZmRjNjc2NGRiM2FkZWQyZTJlODM5NTM2ODM0
ZmFhMzdlLi4zMjc1Yzk3OTA3MWJiNWJmNzI1ZjY4YmE1YWM2MzY4Nzg3NzE1YzdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmgKQEAgLTI4LDkg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKIAotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ1RocmVhZDsKQEAgLTQ2LDcg
KzQ0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkKCk7CiAKIHByaXZh
dGU6Ci0KICAgICBmcmllbmQgY2xhc3MgV2ViQ29tcG9zaXRvcjsKICAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplKFdlYlRocmVhZCogaW1wbFRocmVhZCk7CiAgICAgc3RhdGljIHZvaWQgc2h1dGRv
d24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAppbmRleCA2M2JmMjcwZmUwMjI2NDM2MGY0Mjdh
MmUyM2M2MjhjYWVhMTEyYzk0Li4xMzM4NDg0Y2RkZTRlYWI3ZjIxYTQzYjUzZWI3MWQ2ODBmNTYx
MzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbXBsLmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbXBv
c2l0b3JUaHJlYWQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0LmgiCiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCkBAIC00Mywx
MSArNDQsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBDQ0lucHV0SGFuZGxlcjo6Y3JlYXRlKEND
SW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQpCi17Ci0gICAgcmV0dXJuIFdl
YktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJD
bGllbnQpOwotfQotCiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXIgOiBw
dWJsaWMgQ0NHZXN0dXJlQ3VydmUsIHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGNyZWF0ZShQ
YXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBwbGF0Zm9ybUN1cnZlKQpAQCAtODgsMzgg
Kzg0LDI2IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi0vLyBUaGVzZSBzdGF0
aWNzIG1heSBvbmx5IGJlIGFjY2Vzc2VkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgotaW50
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpzX25leHRBdmFpbGFibGVJZGVudGlmaWVy
ID0gMTsKLUhhc2hTZXQ8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwqPiogV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OnNfY29tcG9zaXRvcnMgPSAwOwotCi1XZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVyKiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9tSWRlbnRpZmllcihp
bnQgaWRlbnRpZmllcikKK1Bhc3NPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCkKIHsKLSAgICByZXR1cm4gV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwoaW5wdXRIYW5k
bGVyQ2xpZW50KSk7CiB9CiAKLVBhc3NPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw+IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoV2ViQ29yZTo6Q0NJbnB1
dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCkKK1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXIqIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKGludCBpZGVu
dGlmaWVyKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwoaW5wdXRIYW5kbGVyQ2xpZW50KSk7CisgICAgcmV0dXJuIFdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsOjpmcm9tSWRlbnRpZmllcihpZGVudGlmaWVyKTsKIH0KIAogV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlciogV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmZyb21J
ZGVudGlmaWVyKGludCBpZGVudGlmaWVyKQogewotICAgIEFTU0VSVChXZWJDb21wb3NpdG9ySW1w
bDo6aW5pdGlhbGl6ZWQoKSk7Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
LQotICAgIGlmICghc19jb21wb3NpdG9ycykKKyAgICBXZWJDb21wb3NpdG9yVGhyZWFkKiB0aHJl
YWQgPSBXZWJDb21wb3NpdG9yVGhyZWFkOjpmcm9tSWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAg
ICBpZiAoIXRocmVhZCkKICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKEhhc2hTZXQ8V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwqPjo6aXRlcmF0b3IgaXQgPSBzX2NvbXBvc2l0b3Jz
LT5iZWdpbigpOyBpdCAhPSBzX2NvbXBvc2l0b3JzLT5lbmQoKTsgKytpdCkgewotICAgICAgICBp
ZiAoKCppdCktPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyKQotICAgICAgICAgICAgcmV0dXJu
ICppdDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRocmVhZC0+aW5wdXRIYW5k
bGVyKCk7CiB9CiAKIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50
KQogICAgIDogbV9jbGllbnQoMCkKLSAgICAsIG1faWRlbnRpZmllcihzX25leHRBdmFpbGFibGVJ
ZGVudGlmaWVyKyspCiAgICAgLCBtX2lucHV0SGFuZGxlckNsaWVudChpbnB1dEhhbmRsZXJDbGll
bnQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9leHBlY3RTY3JvbGxVcGRhdGVFbmQoZmFsc2Up
CkBAIC0xMjgsMTAgKzExMiw2IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVuCiAgICAgLCBtX2dl
c3R1cmVTY3JvbGxTdGFydGVkKGZhbHNlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7Ci0KLSAgICBpZiAoIXNfY29tcG9zaXRvcnMpCi0gICAgICAgIHNfY29tcG9zaXRv
cnMgPSBuZXcgSGFzaFNldDxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCo+OwotICAgIHNf
Y29tcG9zaXRvcnMtPmFkZCh0aGlzKTsKIH0KIAogV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6On5XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCgpCkBAIC0xMzksMTMgKzExOSw2IEBA
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjp+V2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwoKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKG1f
Y2xpZW50KQogICAgICAgICBtX2NsaWVudC0+d2lsbFNodXRkb3duKCk7Ci0KLSAgICBBU1NFUlQo
c19jb21wb3NpdG9ycyk7Ci0gICAgc19jb21wb3NpdG9ycy0+cmVtb3ZlKHRoaXMpOwotICAgIGlm
ICghc19jb21wb3NpdG9ycy0+c2l6ZSgpKSB7Ci0gICAgICAgIGRlbGV0ZSBzX2NvbXBvc2l0b3Jz
OwotICAgICAgICBzX2NvbXBvc2l0b3JzID0gMDsKLSAgICB9CiB9CiAKIHZvaWQgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OnNldENsaWVudChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
Q2xpZW50KiBjbGllbnQpCkBAIC0yOTIsMTIgKzI2NSw2IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
OjpoCiAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKIH0KIAotaW50IFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwotICAgIHJldHVybiBtX2lkZW50aWZpZXI7Ci19Ci0KIHZvaWQgV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUp
CiB7CiAgICAgaWYgKCFtX3doZWVsRmxpbmdBbmltYXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaApp
bmRleCA2NDY0NzEwNWIwM2M3MmRkYzc2Yjk4ZmU5OThlMjhiY2U3ZjI3ZDM3Li5kNWRjOTFhNmY1
OTBhMDgyYmI5MWRhZTU4ZDFkYTc3ZGVkMmM2ZDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKQEAg
LTY0LDcgKzY0LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVy
IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKICAgICAvLyBX
ZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KQEAgLTg4LDcgKzg3
LDYgQEAgcHJpdmF0ZToKICAgICBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyBtX3doZWVs
RmxpbmdQYXJhbWV0ZXJzOwogCiAgICAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCog
bV9jbGllbnQ7Ci0gICAgaW50IG1faWRlbnRpZmllcjsKICAgICBXZWJDb3JlOjpDQ0lucHV0SGFu
ZGxlckNsaWVudCogbV9pbnB1dEhhbmRsZXJDbGllbnQ7CiAKICNpZm5kZWYgTkRFQlVHCkBAIC05
NiwxMSArOTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9leHBlY3RQaW5jaFVwZGF0ZUVuZDsK
ICNlbmRpZgogICAgIGJvb2wgbV9nZXN0dXJlU2Nyb2xsU3RhcnRlZDsKLQotICAgIHN0YXRpYyBp
bnQgc19uZXh0QXZhaWxhYmxlSWRlbnRpZmllcjsKLSAgICBzdGF0aWMgSGFzaFNldDxXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbCo+KiBzX2NvbXBvc2l0b3JzOwogfTsKIAogfQogCi0jZW5k
aWYgLy8gV2ViQ29tcG9zaXRvckltcGxfaAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2U5ZmE1NWU4ZDYyM2E3M2FiNWRjZDczMWY4ODQ5OGMxNjU4MjExNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmNw
cApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9y
RnJhbWVIYW5kbGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbXBsLmgiCisjaW5j
bHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CitQYXNzT3duUHRyPENDVGhyZWFkSGFuZGxlcnM+IENDVGhyZWFkSGFuZGxlcnM6OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIFdlYktpdDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGw6OmNyZWF0ZSgp
OworfQorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhlc2Ugc3RhdGljcyBtYXkgb25s
eSBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KK2ludCBXZWJDb21wb3Np
dG9yVGhyZWFkSW1wbDo6c19uZXh0QXZhaWxhYmxlSWRlbnRpZmllciA9IDE7CitIYXNoU2V0PFdl
YkNvbXBvc2l0b3JUaHJlYWRJbXBsKj4qIFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjpzX2NvbXBv
c2l0b3JzID0gMDsKKworUGFzc093blB0cjxXZWJDb21wb3NpdG9yVGhyZWFkSW1wbD4gV2ViQ29t
cG9zaXRvclRocmVhZEltcGw6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
ZWJDb21wb3NpdG9yVGhyZWFkSW1wbCk7Cit9CisKK1dlYkNvbXBvc2l0b3JUaHJlYWQqIFdlYkNv
bXBvc2l0b3JUaHJlYWQ6OmZyb21JZGVudGlmaWVyKGludCBpZGVudGlmaWVyKQoreworICAgIHJl
dHVybiBXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6ZnJvbUlkZW50aWZpZXIoaWRlbnRpZmllcik7
Cit9CisKK1dlYkNvbXBvc2l0b3JUaHJlYWQqIFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjpmcm9t
SWRlbnRpZmllcihpbnQgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoV2ViQ29tcG9zaXRvcklt
cGw6OmluaXRpYWxpemVkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CisKKyAgICBpZiAoIXNfY29tcG9zaXRvcnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9y
IChIYXNoU2V0PFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsKj46Oml0ZXJhdG9yIGl0ID0gc19jb21w
b3NpdG9ycy0+YmVnaW4oKTsgaXQgIT0gc19jb21wb3NpdG9ycy0+ZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCgqaXQpLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcikKKyAgICAgICAgICAg
IHJldHVybiAqaXQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitXZWJDb21wb3NpdG9yVGhy
ZWFkSW1wbDo6V2ViQ29tcG9zaXRvclRocmVhZEltcGwoKQorICAgIDogbV9pZGVudGlmaWVyKHNf
bmV4dEF2YWlsYWJsZUlkZW50aWZpZXIrKykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOworCisgICAgaWYgKCFzX2NvbXBvc2l0b3JzKQorICAgICAgICBzX2NvbXBvc2l0
b3JzID0gbmV3IEhhc2hTZXQ8V2ViQ29tcG9zaXRvclRocmVhZEltcGwqPjsKKyAgICBzX2NvbXBv
c2l0b3JzLT5hZGQodGhpcyk7Cit9CisKK1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsOjp+V2ViQ29t
cG9zaXRvclRocmVhZEltcGwoKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CisKKyAgICBBU1NFUlQoc19jb21wb3NpdG9ycyk7CisgICAgc19jb21wb3NpdG9ycy0+cmVt
b3ZlKHRoaXMpOworICAgIGlmICghc19jb21wb3NpdG9ycy0+c2l6ZSgpKSB7CisgICAgICAgIGRl
bGV0ZSBzX2NvbXBvc2l0b3JzOworICAgICAgICBzX2NvbXBvc2l0b3JzID0gMDsKKyAgICB9Cit9
CisKK2ludCBXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6aWRlbnRpZmllcigpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9pZGVudGlm
aWVyOworfQorCitDQ0lucHV0SGFuZGxlciogV2ViQ29tcG9zaXRvclRocmVhZEltcGw6OmluaXRp
YWxpemVJbnB1dEhhbmRsZXIoQ0NJbnB1dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVu
dCkKK3sKKyAgICBtX2lucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
OjpjcmVhdGUoaW5wdXRIYW5kbGVyQ2xpZW50KTsKKyAgICByZXR1cm4gbV9pbnB1dEhhbmRsZXIu
Z2V0KCk7Cit9CisKK0NDRnJhbWVIYW5kbGVyKiBXZWJDb21wb3NpdG9yVGhyZWFkSW1wbDo6aW5p
dGlhbGl6ZUZyYW1lSGFuZGxlcigpCit7CisgICAgbV9mcmFtZUhhbmRsZXIgPSBXZWJDb21wb3Np
dG9yRnJhbWVIYW5kbGVySW1wbDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIG1fZnJhbWVIYW5kbGVy
LmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JUaHJlYWRJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVl
ODhlNjVmNWNjYTUwNmI3N2FlZTFkOTY2YmNiMDM2NzZjYjQ1ZWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9yVGhyZWFkSW1wbC5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbXBvc2l0b3JUaHJlYWRJbXBsX2gK
KyNkZWZpbmUgV2ViQ29tcG9zaXRvclRocmVhZEltcGxfaAorCisjaW5jbHVkZSAiV2ViQ29tcG9z
aXRvckZyYW1lSGFuZGxlckltcGwuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JUaHJlYWQuaCIKKyNpbmNsdWRlICJj
Yy9DQ1RocmVhZEhhbmRsZXJzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNvbXBv
c2l0b3JUaHJlYWRJbXBsIDogcHVibGljIFdlYkNvbXBvc2l0b3JUaHJlYWQsIHB1YmxpYyBXZWJD
b3JlOjpDQ1RocmVhZEhhbmRsZXJzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJDb21w
b3NpdG9yVGhyZWFkSW1wbCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29t
cG9zaXRvclRocmVhZEltcGw+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBXZWJDb21wb3NpdG9yVGhy
ZWFkKiBmcm9tSWRlbnRpZmllcihpbnQpOworICAgIHZpcnR1YWwgfldlYkNvbXBvc2l0b3JUaHJl
YWRJbXBsKCk7CisKKyAgICAvLyBDQ1RocmVhZEhhbmRsZXJzIGltcGxlbWVudGF0aW9uCisgICAg
dmlydHVhbCBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlciogaW5pdGlhbGl6ZUlucHV0SGFuZGxlcihX
ZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCopOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Q0NG
cmFtZUhhbmRsZXIqIGluaXRpYWxpemVGcmFtZUhhbmRsZXIoKTsKKyAgICB2aXJ0dWFsIGludCBp
ZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICAvLyBXZWJDb21wb3NpdG9yVGhyZWFkIGltcGxlbWVu
dGF0aW9uCisgICAgdmlydHVhbCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyKiBpbnB1dEhhbmRs
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lucHV0SGFuZGxlci5nZXQoKTsgfQorICAgIHZpcnR1YWwg
V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlciogZnJhbWVIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZUhhbmRsZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBXZWJDb21wb3NpdG9yVGhy
ZWFkSW1wbCgpOworCisgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBt
X2lucHV0SGFuZGxlcjsKKyAgICBPd25QdHI8V2ViQ29tcG9zaXRvckZyYW1lSGFuZGxlckltcGw+
IG1fZnJhbWVIYW5kbGVyOworCisgICAgaW50IG1faWRlbnRpZmllcjsKKyAgICBzdGF0aWMgaW50
IHNfbmV4dEF2YWlsYWJsZUlkZW50aWZpZXI7CisgICAgc3RhdGljIEhhc2hTZXQ8V2ViQ29tcG9z
aXRvclRocmVhZEltcGwqPiogc19jb21wb3NpdG9yczsKK307CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5kZXggZDViNjhhODY3Zjc4MmNjNjdmZDFi
N2JjMjk2MjA1MjkzNGZkNzA5Zi4uOTNlNmU5ZTkwODBkNGZkOTcwNzIwMGU5OGVmMDYyMjE3MjI5
NDg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUg
ImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IgorI2luY2x1ZGUgImNjL0NDVGhyZWFkSGFuZGxlcnMuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQuaCIKIApAQCAtMTAz
LDEzICsxMDQsMTQgQEAgVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZnJvbUlk
ZW50aWZpZXIpCiAKICAgICBpbnQgY29tcG9zaXRvcklkZW50aWZpZXIgPSAtMTsKICAgICB7Ci0g
ICAgICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVy
ID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgY29t
cG9zaXRvcklkZW50aWZpZXIgPSBpbnB1dEhhbmRsZXItPmlkZW50aWZpZXIoKTsKKyAgICAgICAg
T3duUHRyPFdlYkNvcmU6OkNDVGhyZWFkSGFuZGxlcnM+IHRocmVhZCA9IFdlYkNvcmU6OkNDVGhy
ZWFkSGFuZGxlcnM6OmNyZWF0ZSgpOworICAgICAgICBjb21wb3NpdG9ySWRlbnRpZmllciA9IHRo
cmVhZC0+aWRlbnRpZmllcigpOworICAgICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bCogaW5wdXRIYW5kbGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwqPih0aHJlYWQtPmluaXRpYWxpemVJbnB1dEhhbmRsZXIoMCkpOwogICAgICAgICAvLyBUaGUg
Y29tcG9zaXRvciB3ZSBqdXN0IGNyZWF0ZWQgc2hvdWxkIGJlIGxvY2F0YWJsZS4KLSAgICAgICAg
RVhQRUNUX0VRKGlucHV0SGFuZGxlci5nZXQoKSwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6
ZnJvbUlkZW50aWZpZXIoY29tcG9zaXRvcklkZW50aWZpZXIpKTsKKyAgICAgICAgRVhQRUNUX0VR
KGlucHV0SGFuZGxlciwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50aWZpZXIo
Y29tcG9zaXRvcklkZW50aWZpZXIpKTsKIAogICAgICAgICAvLyBCdXQgbm90aGluZyBlbHNlLgot
ICAgICAgICBFWFBFQ1RfRVEoMCwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50
aWZpZXIoaW5wdXRIYW5kbGVyLT5pZGVudGlmaWVyKCkgKyAxMCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMCwgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50aWZpZXIodGhyZWFkLT5p
ZGVudGlmaWVyKCkgKyAxMCkpOwogICAgIH0KIAogICAgIC8vIEFmdGVyIHRoZSBjb21wb3NpdG9y
IGlzIGRlc3Ryb3llZCwgaXRzIGVudHJ5IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIG1hcC4K
</data>
<flag name="review"
          id="159565"
          type_id="1"
          status="-"
          setter="aelias"
    />
          </attachment>
      

    </bug>

</bugzilla>