<?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>70099</bug_id>
          
          <creation_ts>2011-10-14 04:54:31 -0700</creation_ts>
          <short_desc>OpenCL implementation of W3C Filter Effects Master Bug</short_desc>
          <delta_ts>2014-03-02 10:21:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          <dependson>70350</dependson>
    
    <dependson>99829</dependson>
    
    <dependson>107444</dependson>
    
    <dependson>109580</dependson>
    
    <dependson>110193</dependson>
    
    <dependson>110752</dependson>
          <blocked>68469</blocked>
    
    <blocked>68479</blocked>
    
    <blocked>103398</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abucur</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>efidler</cc>
    
    <cc>eoconnor</cc>
    
    <cc>ghimire.himal</cc>
    
    <cc>jamesr</cc>
    
    <cc>joone.hur</cc>
    
    <cc>jschuh</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>peter</cc>
    
    <cc>s.choi</cc>
    
    <cc>senorblanco</cc>
    
    <cc>sentangeleyes</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>tczene</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>twiz</cc>
    
    <cc>vangelis</cc>
    
    <cc>voliver</cc>
    
    <cc>xingnan.wang</cc>
    
    <cc>yael</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>483909</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-14 04:54:31 -0700</bug_when>
    <thetext>I plan to use OpenCL to HW accelerate SVG and CSS Filters [1]. I&apos;m targeting OpenCL 1.1 which consists of two profiles: &apos;full&apos; for the Desktop and &apos;embedded&apos; for embedded devices like mobile phones. For filters I&apos;ll use OpenCLs facilities for image processing from the &apos;full&apos; profile. The most graphic chip manufactures like Imagination [2],[3] support even this part that is optional for the &apos;embedded&apos; profile.

Right now I plan to reuse the current structure of our filters implementation as much as possible. So we can continue to calculate and use the smallest intermediate image buffers. I&apos;ll make sure that we don&apos;t have unnecessary data transfers between host and computing device. Just the data transfer for the source image to the device and the data transfer of the result to the host will be used. Therefore I&apos;ll propose to proceed with the following steps:

1. Make FilterEffect::apply() independent from any imageBuffer / imageData management (this will be a benefit for other HW acceleration implementations like CIFilters or OpenCL ES as well).
2. Add a compiler flag to disable/enable OpenCL
3. Implement basic FilterOpenCL object that manages the image processing, the kernels, the memory objects and the devices.
4. Create kernels for filter effects. This will be done for every single filter effect in followup patches. At the beginning every filter effect just allocates empty memory on the device to not block already implemented effects. I&apos;ll start with implementing SourceGraphic, feOffset and feColorMatrix.
5. Implement fallback to the existing software rendering (or other HW accelerated rendering) if no OpenCL capable device was found.

[1] https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/publish/Filters.html
[2] http://www.imgtec.com/news/Release/index.asp?NewsID=516
[3] http://www.khronos.org/conformance/adopters/conformant-products/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484258</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-10-14 13:55:01 -0700</bug_when>
    <thetext>Why use OpenCL rather than just using the existing WebGL backend (GraphicsContext3D) that already exists? What advantage would OpenCL give you?

Using GraphicsContext3D gives you several advantages:

1) it&apos;s already there. OpenCL is far from universally available. And even though mobile hardware theoretically supports it, I know of no hardware yet that is shipping with it. WebGL runs on top of many platforms. It runs on desktop OpenGL implementations on Windows, OSX and Linux. It runs on OpenGL ES implementations on iOS and Android. And it runs on top of DirectX courtesy of ANGLE.

2) GraphicsContext3D has already solved the &quot;how do I get a buffer on the GPU&quot; issue.

3) The buffers GraphicsContext3D uses already has a path for compositing on the page.

4) There is a new CSS Shaders proposal from Adobe which uses WebGL shaders to do its work. Since SVG and CSS filters are (at least in theory) sharing an implementation, the CSS Shaders implementation would be complicated by an OpenCL backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484276</commentid>
    <comment_count>2</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-14 14:13:54 -0700</bug_when>
    <thetext>(In reply to comment #1)

I think the purpose of this work is not proving that something is possible. Rather that something can be done efficiently.

OpenCL has those nice kernel functions which allows an efficient implemetation of light or turbulence magic. If your GraphichsContext3D allows a similar drawing performance and capabilities, it might be a better choice. So how would you implement http://www.w3.org/TR/SVG/filters.html#feTurbulenceElement with G3D?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484281</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-14 14:17:18 -0700</bug_when>
    <thetext>Maybe do some work on a branch to prove that it&apos;s a win, before landing stuff on TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484398</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-10-14 16:30:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; 
&gt; I think the purpose of this work is not proving that something is possible. Rather that something can be done efficiently.
&gt; 
&gt; OpenCL has those nice kernel functions which allows an efficient implemetation of light or turbulence magic. If your GraphichsContext3D allows a similar drawing performance and capabilities, it might be a better choice. So how would you implement http://www.w3.org/TR/SVG/filters.html#feTurbulenceElement with G3D?

I would find a shader on the web to do it :-)

GLSL, OpenCL and Apple&apos;s CoreImage shading language are all just high level language interfaces to the GPU. So I believe what you can do with one you can do with the other. OpenCL may end up having a nicer syntax for some effects, but I think you can ultimately do the same thing with any of them. And since we&apos;re not talking about exposing the shader syntax to the author(yet!), I&apos;m not sure it matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484467</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-14 22:29:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; 
&gt; &gt; I think the purpose of this work is not proving that something is possible. Rather that something can be done efficiently.
&gt; &gt; 
&gt; &gt; OpenCL has those nice kernel functions which allows an efficient implemetation of light or turbulence magic. If your GraphichsContext3D allows a similar drawing performance and capabilities, it might be a better choice. So how would you implement http://www.w3.org/TR/SVG/filters.html#feTurbulenceElement with G3D?
&gt; 
&gt; I would find a shader on the web to do it :-)
&gt; 
&gt; GLSL, OpenCL and Apple&apos;s CoreImage shading language are all just high level language interfaces to the GPU. So I believe what you can do with one you can do with the other. OpenCL may end up having a nicer syntax for some effects, but I think you can ultimately do the same thing with any of them. And since we&apos;re not talking about exposing the shader syntax to the author(yet!), I&apos;m not sure it matters.

At first. Why do you suggest WebGL? I assume you mean OpenGL ES. I don&apos;t want to give web authors a possibility to apply kernels or shaders at this point.

I&apos;m pretty sure that it is possible with OpenGL ES as well. The advantage of OpenCL is that it can run on different devices at the same time. You can use a CPU, GPU and a DSP all together to calculate the filters. I don&apos;t believe that OpenCL device support is a big problem. There is support for OpenCL on all platforms (linux, windows, macOS) and by all bigger graphic chip manufactures and even on embedded SoC solutions (HW and driver).

OpenCL can work together with OpenGL contexts, so we can still use GraphicsContext3D but do the calculations with OpenCL. So I don&apos;t see a performance lost. As a secondary effect OpenCL kernels are easy to program and therefore more easy to maintain in my opinion.

Another benefit on using OpenCL at this point is, that we can start implementing without modifying filters to use GraphicsContext3D. Also I&apos;m not sure if it is a good idea to always us GraphicsContext3D for every filter (see https://bugs.webkit.org/show_bug.cgi?id=68479#c8).

Because OpenCL runs on CPU as well, it could still work on devices where the GPU is not OpenCL capable.

However, the first step is a benefit and necessary for all HW accelerated solutions. And we can try to go different ways and choose the most effective implementation that also runs on most devices. Implementations that are not used can be removed later like we do it for unused ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485222</commentid>
    <comment_count>6</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-17 09:42:13 -0700</bug_when>
    <thetext>One more data point:

It&apos;s unlikely that Chrome will be able to use an OpenCL implementation of filters, at least not without lots of additional work. The reason is that Chrome&apos;s security model prevents WebKit from directly accessing the GPU. All graphics calls are proxied over to a separate process for validation and execution. The proxying mechanism is hidden behind our GraphicsContext3D implementation so any code using GC3D can take advantage of it. Adding support for executing sufficiently validated OpenCL code on a secondary process won&apos;t be trivial.

For this and all the reasons that Chris mentioned, I would also favor implementing filters using GC3D and GLSL instead of OpenCL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485272</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-17 10:48:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; One more data point:
&gt; 
&gt; It&apos;s unlikely that Chrome will be able to use an OpenCL implementation of filters, at least not without lots of additional work. The reason is that Chrome&apos;s security model prevents WebKit from directly accessing the GPU. All graphics calls are proxied over to a separate process for validation and execution. The proxying mechanism is hidden behind our GraphicsContext3D implementation so any code using GC3D can take advantage of it. Adding support for executing sufficiently validated OpenCL code on a secondary process won&apos;t be trivial.
&gt; 
&gt; For this and all the reasons that Chris mentioned, I would also favor implementing filters using GC3D and GLSL instead of OpenCL.

OpenCL was created from the experience of implementations like CUDA from Nvidia. I strongly believe that OpenCL will replace GLSL in the long term. it has the benefit to not only to work with GPU, but all GPUs CPUs and DSPs of a system. 

The GC3D usage is no barrier. The opposite is the case. Many CL objects have objects with the same meaning in GL and can be used by OpenCL as well:

CL Buffer &lt;-&gt; GL Buffer
CL Image &lt;-&gt; GL Texture / GL RenderBuffers
CL Events &lt;-&gt; GL Sync
CL Context &lt;-&gt; GL Context
...

(The same with D3D objects btw.).

The bigger benefit: we can use HW acceleration for SVG in the short term. This isn&apos;t possible for OpenGL right now, because we don&apos;t support GC3D on SVG. And there is still a lot to do to make SVG use GC3D IMHO.

But again, I don&apos;t have any opposition agains GLSL. But we can just use it for HTML at the beginning, while SVG Filters is the only standardized specification at the moment.

I&apos;m not very familiar with OpenGL. Is the shading language used by OpenGL ES 2.0 the same like GLSL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485277</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-10-17 10:51:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; ...
&gt; 
&gt; At first. Why do you suggest WebGL? I assume you mean OpenGL ES. I don&apos;t want to give web authors a possibility to apply kernels or shaders at this point.

I say WebGL because GraphicsContext3D is the underlying implementation of WebGL. The API and shading language used is OpenGL ES with restrictions for WebGL compliance. So if you think of your implementation as using WebGL, you can understand the constraints within which you must operate.

&gt; 
&gt; I&apos;m pretty sure that it is possible with OpenGL ES as well. The advantage of OpenCL is that it can run on different devices at the same time. You can use a CPU, GPU and a DSP all together to calculate the filters. I don&apos;t believe that OpenCL device support is a big problem. There is support for OpenCL on all platforms (linux, windows, macOS) and by all bigger graphic chip manufactures and even on embedded SoC solutions (HW and driver).

The universality of OpenCL is all very theoretical. As Vangelis says, getting it to work with Chrome would at least be non-trivial. The same is true of other platforms. On all current mobile platforms I am aware of, there is not even an available OpenCL implementation. And if you&apos;re talking about using a software OpenCL implementation, that&apos;s possible, but wouldn&apos;t be very practical, especially on mobile hardware. Since GC3D already works today in many WebKit ports and on many platforms with multiple underlying APIs, it just seems to make sense to use it.

&gt; 
&gt; OpenCL can work together with OpenGL contexts, so we can still use GraphicsContext3D but do the calculations with OpenCL. So I don&apos;t see a performance lost. As a secondary effect OpenCL kernels are easy to program and therefore more easy to maintain in my opinion.
&gt; 
&gt; Another benefit on using OpenCL at this point is, that we can start implementing without modifying filters to use GraphicsContext3D. Also I&apos;m not sure if it is a good idea to always us GraphicsContext3D for every filter (see https://bugs.webkit.org/show_bug.cgi?id=68479#c8).
&gt; 
&gt; Because OpenCL runs on CPU as well, it could still work on devices where the GPU is not OpenCL capable.

Maybe this is just my focus, but it doesn&apos;t seem to be to be very practical to change SVG filters to use OpenCL just to run on a software implementation. We already have a software implementation of SVG filters. Do you have evidence to show that a software OpenCL based implementation would give significant performance improvements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485281</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-10-17 10:56:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
...
&gt; The GC3D usage is no barrier. The opposite is the case. Many CL objects have objects with the same meaning in GL and can be used by OpenCL as well:
&gt; 
&gt; CL Buffer &lt;-&gt; GL Buffer
&gt; CL Image &lt;-&gt; GL Texture / GL RenderBuffers
&gt; CL Events &lt;-&gt; GL Sync
&gt; CL Context &lt;-&gt; GL Context
&gt; ...
&gt; 
&gt; (The same with D3D objects btw.).
&gt; 
&gt; The bigger benefit: we can use HW acceleration for SVG in the short term. This isn&apos;t possible for OpenGL right now, because we don&apos;t support GC3D on SVG. And there is still a lot to do to make SVG use GC3D IMHO.

But in order to use a hardware implementation of OpenCL without a layer, won&apos;t you have to send the filter to the hardware (usually GPU), run the OpenCL filter and then copy the resullts back to the CPU? That would have significant overhead and in many cases would cancel the benefits of doing the filtering in hardware.

&gt; 
&gt; But again, I don&apos;t have any opposition agains GLSL. But we can just use it for HTML at the beginning, while SVG Filters is the only standardized specification at the moment.
&gt; 
&gt; I&apos;m not very familiar with OpenGL. Is the shading language used by OpenGL ES 2.0 the same like GLSL?

If you look at it as a WebGL variant of GLSL, then it is a subset of both OpenGL and OpenGL ES. There are only a few restrictions relative to GLSL ES, and GLSL ES is a pretty heavily reduced subset of GLSL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486032</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-10-18 07:09:30 -0700</bug_when>
    <thetext>It sounds like what&apos;s needed is an abstraction layer at the platform/graphics level.  Then we could have OpenCL, GLES, GraphicsContext3D or other implementations of the filters.

This could either be by new methods on GraphicsContext, or a new interface entirely.  A new interface would have the advantage of being more modular, so ports could choose a filter backend independently of the choice of GraphicsContext backend.

It might also be possible to refactor the existing FilterEffect hierarchy to have multiple implementations.  That would be a bit tricky, though, since there are some dependencies on ByteArrays, and other CPU-specific details even in the base class which would have to be abstracted away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486042</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 07:21:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; It sounds like what&apos;s needed is an abstraction layer at the platform/graphics level.  Then we could have OpenCL, GLES, GraphicsContext3D or other implementations of the filters.
We already started that with the ARM implementation, I&apos;d just continue on that way.

&gt; 
&gt; This could either be by new methods on GraphicsContext, or a new interface entirely.  A new interface would have the advantage of being more modular, so ports could choose a filter backend independently of the choice of GraphicsContext backend.
We would just add a apply method and various platformApply functions that get called. However, we can&apos;t divide the individual ports easily, since we might want to fallback to other implementations (and at the end to software rendering).

&gt; 
&gt; It might also be possible to refactor the existing FilterEffect hierarchy to have multiple implementations.  That would be a bit tricky, though, since there are some dependencies on ByteArrays, and other CPU-specific details even in the base class which would have to be abstracted away.
That&apos;s point one on my list and doesn&apos;t need a lot refactoring. We just need to make the apply function independent of the pixel buffers/imageBuffers. Not a big deal. Also it would be the first step for every implementation: OpenCL, OpenGL (WebGL), CI. That&apos;s why I start here independent of the further discussion. I&apos;ll upload my basic idea of the OpenCL implementation to this bug, just to demonstrate how the different implementations can interact with filters in a couple of days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486058</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-10-18 08:13:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; It sounds like what&apos;s needed is an abstraction layer at the platform/graphics level.  Then we could have OpenCL, GLES, GraphicsContext3D or other implementations of the filters.
&gt; We already started that with the ARM implementation, I&apos;d just continue on that way.

OK, so I&apos;m guessing your plan is to essentially put the OpenCL-specific declarations directly in the header file (e.g., FEGaussianBlur.h), with separate concrete implementations in separate files (e.g., FEGaussianBlurOpenCL.cpp or whatever), but as non-virtual member functions, not as subclasses?  That is consistent with the GraphicsContext approach.  It&apos;s fairly lightweight in terms of lines of code/files, but it does have the disadvantage of not being able to runtime fallbacks in a clean way, since there&apos;s no virtual interface to do runtime dispatch on (the specific fallback path would have to be decided at compile time).  I think that&apos;s probably ok for now, though.

Unlike the Neon case which just takes ByteArrays, presumably the platformApply() functions would need to take some OpenCL-specific datatype, so this code would have to be #ifdef&apos;ed.  Either that, or some abstraction of the images should be used.  Would it be possible or make sense to use Image and/or ImageBuffer here?  Maybe even for the CPU path?  In Chrome we already have code to back these with GPU resources as sources and sinks, so it would really make life easier for us.  Failing that, we could do that in a different flavour of platformApply() which uses Image and ImageBuffer.

&gt; &gt; This could either be by new methods on GraphicsContext, or a new interface entirely.  A new interface would have the advantage of being more modular, so ports could choose a filter backend independently of the choice of GraphicsContext backend.
&gt; We would just add a apply method and various platformApply functions that get called. However, we can&apos;t divide the individual ports easily, since we might want to fallback to other implementations (and at the end to software rendering).

Not sure I completely understand this.  There&apos;s already a virtual apply method; would we need to subclass here?  Or #ifdef different versions of it to handle the different fallback paths?

&gt; &gt; It might also be possible to refactor the existing FilterEffect hierarchy to have multiple implementations.  That would be a bit tricky, though, since there are some dependencies on ByteArrays, and other CPU-specific details even in the base class which would have to be abstracted away.
&gt; That&apos;s point one on my list and doesn&apos;t need a lot refactoring. We just need to make the apply function independent of the pixel buffers/imageBuffers. Not a big deal. Also it would be the first step for every implementation: OpenCL, OpenGL (WebGL), CI. That&apos;s why I start here independent of the further discussion. I&apos;ll upload my basic idea of the OpenCL implementation to this bug, just to demonstrate how the different implementations can interact with filters in a couple of days.

That would be great.  I&apos;m definitely interested in doing an alternate implementation, so having your approach as a reference would be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486096</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 09:33:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; It sounds like what&apos;s needed is an abstraction layer at the platform/graphics level.  Then we could have OpenCL, GLES, GraphicsContext3D or other implementations of the filters.
&gt; &gt; We already started that with the ARM implementation, I&apos;d just continue on that way.
&gt; 
&gt; OK, so I&apos;m guessing your plan is to essentially put the OpenCL-specific declarations directly in the header file (e.g., FEGaussianBlur.h), with separate concrete implementations in separate files (e.g., FEGaussianBlurOpenCL.cpp or whatever), but as non-virtual member functions, not as subclasses?  That is consistent with the GraphicsContext approach.  It&apos;s fairly lightweight in terms of lines of code/files, but it does have the disadvantage of not being able to runtime fallbacks in a clean way, since there&apos;s no virtual interface to do runtime dispatch on (the specific fallback path would have to be decided at compile time).  I think that&apos;s probably ok for now, though.
&gt; 
&gt; Unlike the Neon case which just takes ByteArrays, presumably the platformApply() functions would need to take some OpenCL-specific datatype, so this code would have to be #ifdef&apos;ed.  Either that, or some abstraction of the images should be used.  Would it be possible or make sense to use Image and/or ImageBuffer here?  Maybe even for the CPU path?  In Chrome we already have code to back these with GPU resources as sources and sinks, so it would really make life easier for us.  Failing that, we could do that in a different flavour of platformApply() which uses Image and ImageBuffer.
&gt; 
&gt; &gt; &gt; This could either be by new methods on GraphicsContext, or a new interface entirely.  A new interface would have the advantage of being more modular, so ports could choose a filter backend independently of the choice of GraphicsContext backend.
&gt; &gt; We would just add a apply method and various platformApply functions that get called. However, we can&apos;t divide the individual ports easily, since we might want to fallback to other implementations (and at the end to software rendering).
&gt; 
&gt; Not sure I completely understand this.  There&apos;s already a virtual apply method; would we need to subclass here?  Or #ifdef different versions of it to handle the different fallback paths?
&gt; 
&gt; &gt; &gt; It might also be possible to refactor the existing FilterEffect hierarchy to have multiple implementations.  That would be a bit tricky, though, since there are some dependencies on ByteArrays, and other CPU-specific details even in the base class which would have to be abstracted away.
&gt; &gt; That&apos;s point one on my list and doesn&apos;t need a lot refactoring. We just need to make the apply function independent of the pixel buffers/imageBuffers. Not a big deal. Also it would be the first step for every implementation: OpenCL, OpenGL (WebGL), CI. That&apos;s why I start here independent of the further discussion. I&apos;ll upload my basic idea of the OpenCL implementation to this bug, just to demonstrate how the different implementations can interact with filters in a couple of days.
&gt; 
&gt; That would be great.  I&apos;m definitely interested in doing an alternate implementation, so having your approach as a reference would be helpful.

I don&apos;t feel happy to publish something in this early state. The patch that I&apos;ll upload is just a prove of concept, won&apos;t compile or work at the moment, is not the final concept and might contain some errors. I just prototyped it to give an answer to your questions.

In general we have a function called apply() in FilterEffect. This function doesn&apos;t need to be virtual anymore. But for the prototype I take FEOffset as example:

void FEOffset::apply()
{
    if (hasResult())
        return;
    FilterEffect* in = inputEffect(0);
    in-&gt;apply();
    if (!in-&gt;hasResult())
        return;
    determineAbsolutePaintRect();
    
    // systemSupportsHWAcceleration():
    // * must be set once before calling FilterEffect::apply()
    // * can be static
    // * is an enumeration with different supportable HW acceleration possibilities.
#if USE(OPENCL)
    if (systemSupportsHWAcceleration() = OpenCLSupport) {
        platformApplyOpenCL();
        return;
     }
#endif
#if USE(Something else like OpenGL)
    if (systemSupportsHWAcceleration() =  check other HW acceleration implementations) {
         ...
         return;
    }
#endif 
    platformApplyGeneric();
}

Like you can see, there is an enumeration, that contains all HW acceleration implementations supported by the system. This needs to be checked once before applying the filter and can be static. The OpenCL implementation does not use the intermediate ImageBuffers or  ByteArrays. Instead I introduced a FilterOpenCL object that manages all mem allocations on the devices. The platform specific apply functions need to be virtual and contain the implementation aware code (can be moved to external files like FEOffsetOpenCL.cpp). For OpenCL the function either creates the kernels (like for FEColorMatrix) or copies data from one men object on the device to a new men object on the same device. No data will be copied over the CPU if the GPU was chosen. For OpenGL the function platformApplyOpenGL function would create a shader and might use FilterOpenGL for data and shader management.

If no HW acceleration is supported, we jump back to the software rendering with platformApplyGeneric().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486103</commentid>
    <comment_count>14</comment_count>
      <attachid>111453</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 09:40:18 -0700</bug_when>
    <thetext>Created attachment 111453
Example implementation - OpenCL

Example implementation of OpenCL - prove of concept - doesn&apos;t compile :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486639</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-19 02:37:05 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Why use OpenCL rather than just using the existing WebGL backend (GraphicsContext3D) that already exists? What advantage would OpenCL give you?
I thought about this as well, and think we should start using what-we-already-have, and that is the shading functionality in GC3D, to get started with hw accelerating filters.

My view on this is:
1) Introduce a hardware &quot;platformApplyOpenGL&quot; code path to platform/graphics/filters/*
2) Separate the software rendering fallback into &quot;platformApplySoftware&quot;
3) Write FEGaussianBlurOpenGL.cpp, and let it directly use GC3D, create your shaders, transfer the start ImageData, process the sample, extract an ImageBuffer result.

It may sound awkward to use GC3D in platform/graphics/filters, though we can always refactor that existing code and extract eg. the shading stuff into a FilterOpenGL class, that both Filter and GC3D could use - but keep in mind, I&apos;m just thinking about this, didn&apos;t try this nor did I know if its feasible to do so.

&gt; Using GraphicsContext3D gives you several advantages:
&gt; 
&gt; 1) it&apos;s already there. OpenCL is far from universally available. And even though mobile hardware theoretically supports it, I know of no hardware yet that is shipping with it. WebGL runs on top of many platforms. It runs on desktop OpenGL implementations on Windows, OSX and Linux. It runs on OpenGL ES implementations on iOS and Android. And it runs on top of DirectX courtesy of ANGLE.
What we all want: get HW accelerated filters as fast as possible, now that the software fallback path can be considered complete. The likelihood to get this turned on in trunk is much higher, if we use proven existing code like GC3D is.

&gt; 
&gt; 2) GraphicsContext3D has already solved the &quot;how do I get a buffer on the GPU&quot; issue.
Agreed.

&gt; 
&gt; 3) The buffers GraphicsContext3D uses already has a path for compositing on the page.
Agreed.

&gt; 
&gt; 4) There is a new CSS Shaders proposal from Adobe which uses WebGL shaders to do its work. Since SVG and CSS filters are (at least in theory) sharing an implementation, the CSS Shaders implementation would be complicated by an OpenCL backend.
That&apos;s an important point, and deserves attention. As CSS Shaders will need WebGL shaders, it would be a step backward to introduce another new layer OpenCL at the moment.

CSS Shaders can use the existing GC3D code as well as SVG/CSS filters. As I said above, if it turns out to be awkward to use GC3D right in eg. CSS Shaders or SVG filters (too heavy class, does work we don&apos;t need for just using shaders, etc.) we can go and refactor the relevant bits out of GC3D.

Does that sound like a reasonable route?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486650</commentid>
    <comment_count>16</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-19 03:05:58 -0700</bug_when>
    <thetext>We have decieded to start working on the OpenGL shader based filter implementation, and we don&apos;t abandon the OpenCL work as well. We have enough resurce to do both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486885</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Varga">voliver</who>
    <bug_when>2011-10-19 10:51:49 -0700</bug_when>
    <thetext>Yes, I have started to work on the OpenGL shader based filter implementation.

(In reply to comment #16)
&gt; We have decieded to start working on the OpenGL shader based filter implementation, and we don&apos;t abandon the OpenCL work as well. We have enough resurce to do both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490482</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-25 17:17:47 -0700</bug_when>
    <thetext>If this behavior is based on doing a readback for every element I can&apos;t imagine it performing well since it will destroy any frame overlap and parallelism that you would normally get between the GPU and CPU.  Please guard this with a new #ifdef at least so we can evaluate it independently from other features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497186</commentid>
    <comment_count>19</comment_count>
    <who name="Oliver Varga">voliver</who>
    <bug_when>2011-11-07 08:28:30 -0800</bug_when>
    <thetext>I created a bugreport for &quot;OpenGL shader based implementation of the SVG filters&quot;.
https://bugs.webkit.org/show_bug.cgi?id=71656</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507170</commentid>
    <comment_count>20</comment_count>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-21 13:21:12 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; I created a bugreport for &quot;OpenGL shader based implementation of the SVG filters&quot;.
&gt; https://bugs.webkit.org/show_bug.cgi?id=71656

Dear Kirk, dear all,
	I&apos;m Giulio Urlini and I&apos;m working in ST-Microelectronics. In a common activity between us and ST-Ericsson we are developing a set of OpenCL kernels in order to accelerate the SVG filters available in WebKit.
We already have some results on a quad core x86 platform with an Nvidia Quadro NVS 290. The benchmarks are very promising.
The changes in the original WebKit code are minimal, and can be enabled with preporcessor macros without affecting the actual implementation if the target platform does not support OpenCL.
I would like to share our development, but I&apos;m quite new in the WebKit development community. So what&apos;s the preferred way to share some code for a review?

Thanks in advance.
Best Regards,

Giulio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507171</commentid>
    <comment_count>21</comment_count>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-21 13:23:02 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; I created a bugreport for &quot;OpenGL shader based implementation of the SVG filters&quot;.
&gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=71656
&gt; 
&gt; Dear Kirk, dear all,
&gt;     I&apos;m Giulio Urlini and I&apos;m working in ST-Microelectronics. In a common activity between us and ST-Ericsson we are developing a set of OpenCL kernels in order to accelerate the SVG filters available in WebKit.
&gt; We already have some results on a quad core x86 platform with an Nvidia Quadro NVS 290. The benchmarks are very promising.
&gt; The changes in the original WebKit code are minimal, and can be enabled with preporcessor macros without affecting the actual implementation if the target platform does not support OpenCL.
&gt; I would like to share our development, but I&apos;m quite new in the WebKit development community. So what&apos;s the preferred way to share some code for a review?
&gt; 
&gt; Thanks in advance.
&gt; Best Regards,
&gt; 
&gt; Giulio

Dear Dirk, sorry for the typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507420</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-11-21 22:59:58 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; I created a bugreport for &quot;OpenGL shader based implementation of the SVG filters&quot;.
&gt; &gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=71656
&gt; &gt; 
&gt; &gt; Dear Kirk, dear all,
&gt; &gt;     I&apos;m Giulio Urlini and I&apos;m working in ST-Microelectronics. In a common activity between us and ST-Ericsson we are developing a set of OpenCL kernels in order to accelerate the SVG filters available in WebKit.
&gt; &gt; We already have some results on a quad core x86 platform with an Nvidia Quadro NVS 290. The benchmarks are very promising.
&gt; &gt; The changes in the original WebKit code are minimal, and can be enabled with preporcessor macros without affecting the actual implementation if the target platform does not support OpenCL.
&gt; &gt; I would like to share our development, but I&apos;m quite new in the WebKit development community. So what&apos;s the preferred way to share some code for a review?
&gt; &gt; 
&gt; &gt; Thanks in advance.
&gt; &gt; Best Regards,
&gt; &gt; 
&gt; &gt; Giulio
&gt; 
&gt; Dear Dirk, sorry for the typo

No problem :) If you want to share the code somehow, just post a link to the patch or upload the patch to this bug report (without setting the review flag). I think we just need to agree how we can implement it once the code is ready for landing. Either by setting up a new branch, like Simon Fraser suggested, or directly to trunk with OpenCL compiler flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509068</commentid>
    <comment_count>23</comment_count>
      <attachid>116590</attachid>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-25 03:58:34 -0800</bug_when>
    <thetext>Created attachment 116590
Set of new files for OpenCL support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509070</commentid>
    <comment_count>24</comment_count>
      <attachid>116591</attachid>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-25 04:00:00 -0800</bug_when>
    <thetext>Created attachment 116591
Set of modified common files for OpenCL support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509073</commentid>
    <comment_count>25</comment_count>
      <attachid>116593</attachid>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-25 04:02:31 -0800</bug_when>
    <thetext>Created attachment 116593
Makefiles and configuration for OpenCL optional support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509075</commentid>
    <comment_count>26</comment_count>
      <attachid>116594</attachid>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-25 04:03:29 -0800</bug_when>
    <thetext>Created attachment 116594
Set of SVG filters modified with optional OpenCL support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509076</commentid>
    <comment_count>27</comment_count>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-25 04:04:10 -0800</bug_when>
    <thetext>Dear all,
     following my previous message I would like to propose our development to integrate the OpenCL support for some SVG filters.
I&apos;ve divided my patches in several parts:
- config_make_files.patch where the makefiles and configure have been updated to add the compilation option for OpenCL
- common_files_modified.patch where the activation of OpenCL is inserted
- common_files_added.patch a set of files added in order to provide a set of common functions for the OpenCL usage
- filters_modified.patch are the filters actually modified

The preprocessor ENABLE(OPENCL) is activated by configure
the preprocessor USE_C_PROFILING and USE_OPENCL are activated manually in the file oclHelper.h described in common_files_added.patch

Best Regards,

Giulio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509112</commentid>
    <comment_count>28</comment_count>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2011-11-25 05:24:26 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Dear all,
&gt;      following my previous message I would like to propose our development to integrate the OpenCL support for some SVG filters.
&gt; I&apos;ve divided my patches in several parts:
&gt; - config_make_files.patch where the makefiles and configure have been updated to add the compilation option for OpenCL
&gt; - common_files_modified.patch where the activation of OpenCL is inserted
&gt; - common_files_added.patch a set of files added in order to provide a set of common functions for the OpenCL usage
&gt; - filters_modified.patch are the filters actually modified
&gt; 
&gt; The preprocessor ENABLE(OPENCL) is activated by configure
&gt; the preprocessor USE_C_PROFILING and USE_OPENCL are activated manually in the file oclHelper.h described in common_files_added.patch
&gt; 
&gt; Best Regards,
&gt; 
&gt; Giulio


Hi!
I try to test your patch, but i can&apos;t. Can you upload the kernel files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509638</commentid>
    <comment_count>29</comment_count>
      <attachid>116710</attachid>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-11-28 01:16:40 -0800</bug_when>
    <thetext>Created attachment 116710
OCL kernels for modified SVG filters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512619</commentid>
    <comment_count>30</comment_count>
      <attachid>117378</attachid>
    <who name="Surinder-Pal Singh">srplsnh</who>
    <bug_when>2011-12-01 01:31:24 -0800</bug_when>
    <thetext>Created attachment 117378
Additional patch to the OpenCL filter patches posted earlier by Giulio Urlini

Hi,

This patch is a continuation of the patches posted earlier by Giulio from STMicroelectronics and adds a copyright notice as required by the Nvidia OpenCL SDK EULA since the blur filter opencl kernel has been adapted from their OpenCL SDK. Please note that we added the current blur kernel filter  but it does not exactly match the output of the original C++ filter implementation since this was more of a work-in-progress experiment. In the meantime we&apos;ve also have an implementation that matches exactly the C++ filter output and will post that patch as well shortly.

-Surinder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512921</commentid>
    <comment_count>31</comment_count>
      <attachid>116710</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 11:18:28 -0800</bug_when>
    <thetext>Comment on attachment 116710
OCL kernels for modified SVG filters

These files do not appear to have license header blocks. We require that all code contributed to the project be licensed under a BSD or LGPL 2.1 license, and typically encode this information in comments within the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513585</commentid>
    <comment_count>32</comment_count>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-12-02 00:29:23 -0800</bug_when>
    <thetext>We are not particularly keen on a specific license. We would prefer GPLv2 or v3 but even BSD or LGPL is ok. Whichever the webkit team would prefer is ok for us. Actually I&apos;ll re-post the code with a GPL license statement, but it can be changed if you have a different opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513589</commentid>
    <comment_count>33</comment_count>
      <attachid>117584</attachid>
    <who name="Giulio Urlini">sentangeleyes</who>
    <bug_when>2011-12-02 00:41:12 -0800</bug_when>
    <thetext>Created attachment 117584
OCL kernels for modified SVG filters

This new version of OpenCL kernels contains a proper license statement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513606</commentid>
    <comment_count>34</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-02 01:14:03 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; We are not particularly keen on a specific license. We would prefer GPLv2 or v3 but even BSD or LGPL is ok. Whichever the webkit team would prefer is ok for us. Actually I&apos;ll re-post the code with a GPL license statement, but it can be changed if you have a different opinion.

When someone become a committer, he/she has to sign a paper about code contribution rules, and it clearly states the allowed licenses (BSD or LGPLv2). Basically just copy a license block from a file in the same directory.

Useful for new contributors: http://www.webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513940</commentid>
    <comment_count>35</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-12-02 11:06:20 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Created an attachment (id=117584) [details]
&gt; OCL kernels for modified SVG filters
&gt; 
&gt; This new version of OpenCL kernels contains a proper license statement

Can you use svn or git patches please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513961</commentid>
    <comment_count>36</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-12-02 11:19:12 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; If this behavior is based on doing a readback for every element I can&apos;t imagine it performing well since it will destroy any frame overlap and parallelism that you would normally get between the GPU and CPU.  Please guard this with a new #ifdef at least so we can evaluate it independently from other features.

I want to second James&apos; comment about the rationale behind this approach. Uploading an image to the CPU, running an OpenCL shader on it, and then reading the resullt back into the CPU will have a big enough performance impact, that I would be willing to bet that for many filters, just doing it in software would be faster, especially if vector instructions were employed.

WebKit has an architecture for hardware accelerating bitmap layers. Any use of the GPU should go through that mechanism. I don&apos; think it&apos;s in the best interest of the WebKit project to embed this sort of functionality throughout the high-level filter logic.

There are system level filter changes currently underway. In https://bugs.webkit.org/show_bug.cgi?id=68479 I will be adding logic to the RenderLayer level to create layers when an element has a filter. I will also add API to GraphicsLayer to pass in info about adding a filter to the layer and animating that filter. There are implementations of GraphicsLayer that use OpenGL contexts for rendering, so it should not be hard to incorporate OpenCL based filter rendering into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536965</commentid>
    <comment_count>37</comment_count>
      <attachid>122736</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-01-17 01:41:40 -0800</bug_when>
    <thetext>Created attachment 122736
opencl

I used Giulio Urlini patch.

In the next step, i will try to eliminate unecessary memory copies between the opencl device and the cpu. The purpose of this we don&apos;t copy the filter while we use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551960</commentid>
    <comment_count>38</comment_count>
      <attachid>126041</attachid>
    <who name="Himal Ghimiray">ghimire.himal</who>
    <bug_when>2012-02-08 03:12:34 -0800</bug_when>
    <thetext>Created attachment 126041
Updated OpenCL patch and performance figures.

Dear Czene,
I am attaching an updated patch for OpenCL svg filters. This patch basically fixes some bugs and minor cleanup. 

I&apos;ve also attached a pdf with performance figures ie. GPU vs CPU.
Cheers,
Himal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551969</commentid>
    <comment_count>39</comment_count>
    <who name="Himal Ghimiray">ghimire.himal</who>
    <bug_when>2012-02-08 03:21:17 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created an attachment (id=126041) [details]
&gt; Updated OpenCL patch and performance figures.
&gt; Dear Czene,
&gt; I am attaching an updated patch for OpenCL svg filters. This patch basically fixes some bugs and minor cleanup. 
&gt; I&apos;ve also attached a pdf with performance figures ie. GPU vs CPU.
&gt; Cheers,
&gt; Himal

Dear All,
In performance figure document 
Speed up formula used is CPU Timing/OpenCL Timing(including data transfer) all the graphs are based on it.

Cheers,
Himal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621541</commentid>
    <comment_count>40</comment_count>
      <attachid>141390</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-05-11 06:01:11 -0700</bug_when>
    <thetext>Created attachment 141390
Example implementation - OpenCL

The following patch is the OpenCL based implementation of the SVG filters. There aren&apos;t any performance measure yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718394</commentid>
    <comment_count>41</comment_count>
      <attachid>163638</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-09-12 08:34:57 -0700</bug_when>
    <thetext>Created attachment 163638
Example implementation - OpenCL</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111453</attachid>
            <date>2011-10-18 09:40:18 -0700</date>
            <delta_ts>2011-10-18 09:40:18 -0700</delta_ts>
            <desc>Example implementation - OpenCL</desc>
            <filename>filters-opencl.patch</filename>
            <type>text/plain</type>
            <size>41836</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk3NDc3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05ODQsNiArOTg0LDggQEAKIAkJ
NDFGNTg0QzcxMDQ2NTJDQjAwOUNBQTY0IC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjU4NEM2MTA0NjUyQ0Iw
MDlDQUE2NCAvKiBKU01lc3NhZ2VQb3J0Q3VzdG9tLmggKi87IH07CiAJCTQxRkEzMDNFMTMxNkMy
OUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRkEzMDNDMTMxNkMyOUMwMEMwQkZDNSAvKiBS
ZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCAqLzsgfTsKIAkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1
IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxRkEzMDNEMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNv
bnRyb2xzLmggKi87IH07CisJCTQzMDlDOUZDMTQ0OEM4QTYwMDJEMkM4MiAvKiBGaWx0ZXJPcGVu
Q0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDMw
OUM5RkExNDQ4QzhBNjAwMkQyQzgyIC8qIEZpbHRlck9wZW5DTC5jcHAgKi87IH07CisJCTQzMDlD
OUZEMTQ0OEM4QTYwMDJEMkM4MiAvKiBGaWx0ZXJPcGVuQ0wuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzMDlDOUZCMTQ0OEM4QTYwMDJEMkM4MiAvKiBG
aWx0ZXJPcGVuQ0wuaCAqLzsgfTsKIAkJNDMxNDJFN0ExM0IxRTk3NzAwRjFDODcxIC8qIFNWR0Fu
aW1hdGVkUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzE0MkU3OTEzQjFFOTc3MDBGMUM4NzEgLyogU1ZHQW5pbWF0ZWRSZWN0LmNwcCAqLzsg
fTsKIAkJNDMxQTJGOUMxM0I2RjJCMDAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9u
YWxOdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzMUEyRjlBMTNCNkYyQjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVt
YmVyLmggKi87IH07CiAJCTQzMUEyRjlEMTNCNkYyQjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51
bWJlck9wdGlvbmFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzMUEyRjlCMTNCNkYyQjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51bWJl
ck9wdGlvbmFsTnVtYmVyLmNwcCAqLzsgfTsKQEAgLTEwNjgsNiArMTA3MCw3IEBACiAJCTQzQzA5
MkJDMTJEOUU0RUUwMEE5ODlDMyAvKiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0MwOTJCQTEyRDlFNEVFMDBB
OTg5QzMgLyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oICovOyB9OwogCQk0M0QyNTk3NzEzQzgx
NkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVm
ZmVyLmNwcCAqLzsgfTsKIAkJNDNGNkZEOTYxM0JDRDBCMTAwMjI0MDUyIC8qIFNWR0FuaW1hdGVk
SW50ZWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0M0Y2RkQ5NTEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCAqLzsg
fTsKKwkJNDNGOUExOTUxM0NDQTcyOTAwOTIyNEJFIC8qIE9wZW5DTC5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0Y5QTE5NDEzQ0NB
NzI5MDA5MjI0QkUgLyogT3BlbkNMLmZyYW1ld29yayAqLzsgfTsKIAkJNDQxNTI5MkUwRTFBRThB
MDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwICovOyB9OwogCQk0NDFCMDU1QzBDRDc3QTJEMDA3QzFGMTggLyogRE9NSFRNTEVtYmVkRWxl
bWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlBQUZCMENCODRFODgwMDc2NDdDNSAvKiBET01IVE1MRW1i
ZWRFbGVtZW50UHJpdmF0ZS5oICovOyB9OwpAQCAtODA5NCw2ICs4MDk3LDggQEAKIAkJNDFGNTg0
QzYxMDQ2NTJDQjAwOUNBQTY0IC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZXNzYWdlUG9ydEN1c3RvbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MUZBMzAzQzEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFD
b250cm9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGQTMwM0Qx
MzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9scy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MzA5QzlGQTE0NDhDOEE2MDAyRDJDODIgLyogRmlsdGVyT3BlbkNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbHRlck9wZW5DTC5jcHA7
IHBhdGggPSBmaWx0ZXJzL29wZW5jbC9GaWx0ZXJPcGVuQ0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MzA5QzlGQjE0NDhDOEE2MDAyRDJDODIgLyogRmlsdGVyT3BlbkNMLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbHRlck9wZW5DTC5oOyBwYXRoID0g
ZmlsdGVycy9vcGVuY2wvRmlsdGVyT3BlbkNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzMTQyRTc5MTNCMUU5NzcwMEYxQzg3MSAvKiBTVkdBbmltYXRlZFJlY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQW5pbWF0ZWRSZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDMxQTJGOUExM0I2RjJCMDAwNzc5MUU0IC8qIFNW
R0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MzFBMkY5QjEzQjZGMkIwMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRO
dW1iZXJPcHRpb25hbE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTgyMDgsNiArODIxMyw3IEBACiAJCTQzQzA5MkJBMTJEOUU0RUUwMEE5
ODlDMyAvKiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNGNkZEOTUxM0JDRDBCMTAwMjI0MDUyIC8qIFNWR0Fu
aW1hdGVkSW50ZWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdBbmltYXRlZEludGVnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0Y5
QTE5NDEzQ0NBNzI5MDA5MjI0QkUgLyogT3BlbkNMLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1l
ID0gT3BlbkNMLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09w
ZW5DTC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTQ0MTUyOTJD
MEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0MjlBQUZCMENCODRFODgwMDc2NDdDNSAvKiBET01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTEVtYmVkRWxlbWVudFBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNzMzLDYgKzEzNzM5LDcg
QEAKIAkJCQk0OUM3QkE3OTEwNDJFRkFFMDAwOUQ0NDcgLyogT3BlbkdMLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAogCQkJCUE4OEFENTJGMDk1MjRCOTIwMDFERDE5NiAvKiBRdWFydHpDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTFBN0ZBN0NDMEREQTRCNzcwMDI4RjhB
NSAvKiBTeXN0ZW1Db25maWd1cmF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJ
CTQzRjlBMTk1MTNDQ0E3MjkwMDkyMjRCRSAvKiBPcGVuQ0wuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xMzgyMCw2ICsxMzgyNyw3IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMw
NyAvKiBXZWJLaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTQzRjlBMTk0MTNDQ0E3MjkwMDkyMjRCRSAvKiBPcGVuQ0wuZnJhbWV3b3JrICovLAogCQkJ
CTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBB
RUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENB
ODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLApAQCAtMTQ3NTIsNiArMTQ3NjAs
MTUgQEAKIAkJCXBhdGggPSBqczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CTQzMDlDOUY5MTQ0OEM3RDkwMDJEMkM4MiAvKiBvcGVuY2wgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTQzMDlDOUZBMTQ0OEM4QTYwMDJEMkM4MiAvKiBG
aWx0ZXJPcGVuQ0wuY3BwICovLAorCQkJCTQzMDlDOUZCMTQ0OEM4QTYwMDJEMkM4MiAvKiBGaWx0
ZXJPcGVuQ0wuaCAqLywKKwkJCSk7CisJCQluYW1lID0gb3BlbmNsOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNDM5MDQ2QzIxMkRBMjVDRTAwQUY4MEEyIC8qIG1hdGhtbCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNzUyOSw2ICsx
NzU0Niw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTE5ODQx
QkZBMTM2ODM2QTEwMDZFQkJCOSAvKiBhcm0gKi8sCisJCQkJNDMwOUM5RjkxNDQ4QzdEOTAwMkQy
QzgyIC8qIG9wZW5jbCAqLywKIAkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFu
dExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlz
dGFudExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZF
QmxlbmQuY3BwICovLApAQCAtMjQ2MjQsNiArMjQ2NDIsNyBAQAogCQkJCTlCMzc1RURCMTQ0NzhB
MDEwMEYzQ0FFNSAvKiBNaWNyb0RhdGFJdGVtTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlB
RjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzFDQ0I0OUQxNDQ4MjRBQzAwQzY3NkQ2IC8qIEltYWdlQnlTaXplQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQzMDlDOUZEMTQ0OEM4QTYwMDJEMkM4MiAvKiBGaWx0ZXJP
cGVuQ0wuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjQ3MDEsNiArMjQ3MjAsOSBAQAogLyogQmVnaW4g
UEJYUHJvamVjdCBzZWN0aW9uICovCiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9q
ZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CisJCQlhdHRyaWJ1dGVzID0g
eworCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNDEwOworCQkJfTsKIAkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJz
aW9uID0gIlhjb2RlIDIuNCI7CiAJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CkBAIC0y
NzQ3Nyw2ICsyNzQ5OSw3IEBACiAJCQkJNDlBRjJENkMxNDQzNUQyMTAwMTZBNzg0IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvck1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUZDN0E1MDE0NDRB
RjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTcxQ0NCNDlDMTQ0ODI0QUMwMEM2NzZENiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQzMDlDOUZDMTQ0OEM4QTYwMDJEMkM4MiAvKiBGaWx0ZXJPcGVuQ0wu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDk3
NDc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDQ1ICsxNTYsMTIyIEBAIHZvaWQgZWZm
ZWN0VHlwZShCeXRlQXJyYXkqIHBpeGVsQXJyYXksIGMKICAgICB9CiB9CiAKLXZvaWQgRkVDb2xv
ck1hdHJpeDo6YXBwbHkoKQordm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5T3BlbkNM
KCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFp
bi0+aGFzUmVzdWx0KCkpCisKKyAgICBGaWx0ZXJPcGVuQ0wqIG9wZW5DTCA9IGZpbHRlcigpLT5m
aWx0ZXJPcGVuQ0woKTsKKyAgICBjbF9tZW0gc3JjSW1hZ2UgPSBvcGVuQ0wtPmltYWdlRm9yRmls
dGVyRWZmZWN0KGluKTsKKyAgICBjbF9tZW0gZHN0SW1hZ2UgPSBvcGVuQ0wtPmNyZWF0ZUltYWdl
KGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpLCB0aGlzKTsKKworICAgIGNsX2tlcm5lbCBjbEtl
cm5lbDsKKyAgICBjbF9pbnQgZXJyb3IgPSBDTF9TVUNDRVNTOworICAgIGNsX3Byb2dyYW0gY2xQ
cm9ncmFtID0gb3BlbkNMLT5wcm9ncmFtKCk7CisgICAgY2xfc2FtcGxlciBjbFNhbXBsZXIgPSBv
cGVuQ0wtPnNhbXBsZXIoKTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgZmxvYXQgdmFsdWVzWzIwXSA9IHttX3ZhbHVl
c1swXSwgbV92YWx1ZXNbMV0sIG1fdmFsdWVzWzJdLCBtX3ZhbHVlc1szXSwgbV92YWx1ZXNbNF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZXNbNV0sIG1fdmFsdWVzWzZdLCBt
X3ZhbHVlc1s3XSwgbV92YWx1ZXNbOF0sIG1fdmFsdWVzWzldLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVzWzEwXSwgbV92YWx1ZXNbMTFdLCBtX3ZhbHVlc1sxMl0sIG1fdmFs
dWVzWzEzXSwgbV92YWx1ZXNbMTRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVzWzE1XSwgbV92YWx1ZXNbMTZdLCBtX3ZhbHVlc1sxN10sIG1fdmFsdWVzWzE4XSwgbV92YWx1
ZXNbMTldfTsKKyAgICAgICAgY2xLZXJuZWwgPSBjbENyZWF0ZUtlcm5lbChjbFByb2dyYW0sICJj
b2xvck1hdHJpeCIsICZlcnJvcik7CisgICAgICAgIGVycm9yICA9IGNsU2V0S2VybmVsQXJnKGNs
S2VybmVsLCAwLCBzaXplb2YoY2xfbWVtKSwgJnNyY0ltYWdlKTsKKyAgICAgICAgZXJyb3IgfD0g
Y2xTZXRLZXJuZWxBcmcoY2xLZXJuZWwsIDEsIHNpemVvZihjbF9tZW0pLCAmZHN0SW1hZ2UpOwor
ICAgICAgICBlcnJvciB8PSBjbFNldEtlcm5lbEFyZyhjbEtlcm5lbCwgMiwgc2l6ZW9mKGNsX21l
bSksICh2b2lkKikmdmFsdWVzKTsKKyAgICAgICAgZXJyb3IgfD0gY2xTZXRLZXJuZWxBcmcoY2xL
ZXJuZWwsIDMsIHNpemVvZihjbF9zYW1wbGVyKSwgKHZvaWQqKSZjbFNhbXBsZXIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IHsK
KyAgICAgICAgY2xLZXJuZWwgPSBjbENyZWF0ZUtlcm5lbChjbFByb2dyYW0sICJzYXR1cmF0ZSIs
ICZlcnJvcik7CisgICAgICAgIGVycm9yICA9IGNsU2V0S2VybmVsQXJnKGNsS2VybmVsLCAwLCBz
aXplb2YoY2xfbWVtKSwgJnNyY0ltYWdlKTsKKyAgICAgICAgZXJyb3IgfD0gY2xTZXRLZXJuZWxB
cmcoY2xLZXJuZWwsIDEsIHNpemVvZihjbF9tZW0pLCAmZHN0SW1hZ2UpOworICAgICAgICBlcnJv
ciB8PSBjbFNldEtlcm5lbEFyZyhjbEtlcm5lbCwgMiwgc2l6ZW9mKGZsb2F0KSwgKHZvaWQqKSZt
X3ZhbHVlc1swXSk7CisgICAgICAgIGVycm9yIHw9IGNsU2V0S2VybmVsQXJnKGNsS2VybmVsLCAz
LCBzaXplb2YoY2xfc2FtcGxlciksICh2b2lkKikmY2xTYW1wbGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAg
ICBmbG9hdCBjb3NIdWUgPSBjb3MobV92YWx1ZXNbMF0gKiBwaUZsb2F0IC8gMTgwKTsgCisgICAg
ICAgIGZsb2F0IHNpbkh1ZSA9IHNpbihtX3ZhbHVlc1swXSAqIHBpRmxvYXQgLyAxODApOyAKKyAg
ICAgICAgY2xLZXJuZWwgPSBjbENyZWF0ZUtlcm5lbChjbFByb2dyYW0sICJodWVyb3RhdGUiLCAm
ZXJyb3IpOworICAgICAgICBlcnJvciAgPSBjbFNldEtlcm5lbEFyZyhjbEtlcm5lbCwgMCwgc2l6
ZW9mKGNsX21lbSksICZzcmNJbWFnZSk7CisgICAgICAgIGVycm9yIHw9IGNsU2V0S2VybmVsQXJn
KGNsS2VybmVsLCAxLCBzaXplb2YoY2xfbWVtKSwgJmRzdEltYWdlKTsKKyAgICAgICAgZXJyb3Ig
fD0gY2xTZXRLZXJuZWxBcmcoY2xLZXJuZWwsIDIsIHNpemVvZihmbG9hdCksICh2b2lkKikmY29z
SHVlKTsKKyAgICAgICAgZXJyb3IgfD0gY2xTZXRLZXJuZWxBcmcoY2xLZXJuZWwsIDMsIHNpemVv
ZihmbG9hdCksICh2b2lkKikmc2luSHVlKTsKKyAgICAgICAgZXJyb3IgfD0gY2xTZXRLZXJuZWxB
cmcoY2xLZXJuZWwsIDQsIHNpemVvZihjbF9zYW1wbGVyKSwgKHZvaWQqKSZjbFNhbXBsZXIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQTogeworICAgICAgICBjbEtlcm5lbCA9IGNsQ3JlYXRlS2VybmVsKGNsUHJvZ3Jh
bSwgImx1bWluYW5jZSIsICZlcnJvcik7CisgICAgICAgIGVycm9yICA9IGNsU2V0S2VybmVsQXJn
KGNsS2VybmVsLCAwLCBzaXplb2YoY2xfbWVtKSwgJnNyY0ltYWdlKTsKKyAgICAgICAgZXJyb3Ig
fD0gY2xTZXRLZXJuZWxBcmcoY2xLZXJuZWwsIDEsIHNpemVvZihjbF9tZW0pLCAmZHN0SW1hZ2Up
OworICAgICAgICBlcnJvciB8PSBjbFNldEtlcm5lbEFyZyhjbEtlcm5lbCwgMiwgc2l6ZW9mKGNs
X3NhbXBsZXIpLCAodm9pZCopJmNsU2FtcGxlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICB9CisgICAgb3BlbkNMLT5hZGRLZXJuZWxUb0NvbW1hbmRRdWV1ZShjbEtlcm5lbCk7Cit9CiAK
K3ZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKSB7CiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQog
ICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3
SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotCisgICAg
CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7Ci0KKyAgICAKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZm
ZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LmdldCgpLCBtX3Zh
bHVlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBp
eGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4
ZWxBcnJheS5nZXQoKSwgbV92YWx1ZXMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dO
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDoKKyAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4o
cGl4ZWxBcnJheS5nZXQoKSwgbV92YWx1ZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKKyAgICAgICAgICAgIGVmZmVjdFR5
cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LmdldCgpLCBtX3ZhbHVl
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFPihwaXhlbEFycmF5LmdldCgpLCBtX3ZhbHVlcyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAg
ICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBp
eGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKKyAgICAgICAgICAgIHNldElzQWxwaGFJbWFnZSh0
cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgIAogICAgIHJlc3VsdEltYWdl
LT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5nZXQoKSwgaW1hZ2VSZWN0LnNp
emUoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAordm9pZCBGRUNvbG9yTWF0cml4Ojph
cHBseSgpCit7CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CisgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseSgpOworICAgIGlm
ICghaW4tPmhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CisgICAgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKKyAgICAKKyAgICAvLyBzeXN0ZW1TdXBwb3J0c0hXQWNjZWxlcmF0aW9u
KCk6CisgICAgLy8gKiBtdXN0IGJlIHNldCBvbmNlIGJlZm9yZSBjYWxsaW5nIEZpbHRlckVmZmVj
dDo6YXBwbHkoKQorICAgIC8vICogY2FuIGJlIHN0YXRpYworICAgIC8vICogaXMgYW4gZW51bWVy
YXRpb24gd2l0aCBkaWZmZXJlbnQgc3VwcG9ydGFibGUgSFcgYWNjZWxlcmF0aW9uIHBvc2liaWxp
dGllcy4KKyAgICAvLyAjaWYgVVNFKE9QRU5DTCkKKyAgICAvLyBpZiAoc3lzdGVtU3VwcG9ydHNI
V0FjY2VsZXJhdGlvbigpID0gT3BlbkNMU3VwcG9ydCkgeworICAgIHBsYXRmb3JtQXBwbHlPcGVu
Q0woKTsKKyAgICAvLyAgICAgcmV0dXJuOworICAgIC8vIH0KKyAgICAvLyAjZW5kaWYKKyAgICAv
LyAjaWYgVVNFKFNvbWV0aGluZyBlbHNlIGxpa2UgT3BlbkdMKQorICAgIC8vIGlmIChjaGVjayBv
dGhlciBIVyBhY2NlbGVyYXRpb24gaW1wbGVtZW50YXRpb25zKSB7CisgICAgLy8gICAgIC4uLgor
ICAgIC8vICAgICByZXR1cm47CisgICAgLy8gI2VuZGlmIAorICAgIC8vIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKCk7Cit9CisKIHZvaWQgRkVDb2xvck1hdHJpeDo6ZHVtcCgpCiB7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaAkocmV2aXNpb24gOTc0NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CiAgICAgdmly
dHVhbCB2b2lkIGR1bXAoKTsKKyAgICAKKyAgICAvLyAjaWYgLi4uCisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyAgICAvLyAjZW5kaWYgLi4uCisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gOTc0NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQs
MjcgKzc0LDc0IEBAIHZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWMKICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQog
Ci12b2lkIEZFT2Zmc2V0OjphcHBseSgpCit2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYg
KCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpbi0+cGxhdGZvcm1BcHBs
eU9wZW5DTCgpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgCisgICAg
Ly8gQ3JlYXRlIG1lbW9yeSBvYmplY3Qgb24gZGV2aWNlLgorICAgIEZpbHRlciogZmlsdGVyID0g
dGhpcy0+ZmlsdGVyKCk7CisgICAgRmlsdGVyT3BlbkNMKiBvcGVuQ0wgPSBmaWx0ZXItPmZpbHRl
ck9wZW5DTCgpOworICAgIEludFNpemUgc2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBzaXplKTsKKworICAgIGNsX21lbSBkc3RJ
bWFnZSA9IG9wZW5DTC0+Y3JlYXRlSW1hZ2Uoc2l6ZSwgdGhpcyk7CisKKyAgICAvLyBHZXQgaW1h
Z2Ugb2JqZWN0IG9mIGlucHV0IGVmZmVjdC4KKyAgICBjbF9tZW0gc3JjSW1hZ2UgPSBvcGVuQ0wt
PmltYWdlRm9yRmlsdGVyRWZmZWN0KGluKTsKKyAgICAKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9
IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIHNyY1JlY3QubW92ZShmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7
CisgICAgCisgICAgLy8gQ29weSByZWxldmFudCBpbWFnZSBhcmVhIG9mIGlucHV0IGVmZmVjdCB0
byBtZW1vcnkgb2JqZWN0LiAgICAKKyAgICBvcGVuQ0wtPmNvcHlJbWFnZShzcmNJbWFnZSwgZHN0
SW1hZ2UsIGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCksIGFic29sdXRlUGFpbnRSZWN0KCkpOwor
fQogCit2b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIAogICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0Fs
cGhhSW1hZ2UoKSk7Ci0KKyAgICAKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIEZpbHRl
ciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRl
ci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxl
KG1fZHkpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbik7CiB9
CiAKK3ZvaWQgRkVPZmZzZXQ6OmFwcGx5KCkKK3sKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAg
aW4tPmFwcGx5KCk7CisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIAorICAgIC8vIHN5c3RlbVN1
cHBvcnRzSFdBY2NlbGVyYXRpb24oKToKKyAgICAvLyAqIG11c3QgYmUgc2V0IG9uY2UgYmVmb3Jl
IGNhbGxpbmcgRmlsdGVyRWZmZWN0OjphcHBseSgpCisgICAgLy8gKiBjYW4gYmUgc3RhdGljCisg
ICAgLy8gKiBpcyBhbiBlbnVtZXJhdGlvbiB3aXRoIGRpZmZlcmVudCBzdXBwb3J0YWJsZSBIVyBh
Y2NlbGVyYXRpb24gcG9zaWJpbGl0aWVzLgorICAgIC8vICNpZiBVU0UoT1BFTkNMKQorICAgIC8v
IGlmIChzeXN0ZW1TdXBwb3J0c0hXQWNjZWxlcmF0aW9uKCkgPSBPcGVuQ0xTdXBwb3J0KSB7Cisg
ICAgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworICAgIC8vICAgICByZXR1cm47CisgICAgLy8gfQor
ICAgIC8vICNlbmRpZgorICAgIC8vICNpZiBVU0UoU29tZXRoaW5nIGVsc2UgbGlrZSBPcGVuR0wp
CisgICAgLy8gaWYgKGNoZWNrIG90aGVyIEhXIGFjY2VsZXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMp
IHsKKyAgICAvLyAgICAgLi4uCisgICAgLy8gICAgIHJldHVybjsKKyAgICAvLyAjZW5kaWYgCisg
ICAgLy8gcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKK30KKwogdm9pZCBGRU9mZnNldDo6ZHVtcCgp
CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5oCShyZXZpc2lvbiA5NzQ3NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwogICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCk7CiAgICAgCisgICAgLy8gI2lmIC4uLgorICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisgICAgLy8gI2VuZGlmIC4uLgorICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOworICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aAkocmV2aXNpb24gOTc0NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5l
IEZpbHRlcl9oCiAKICNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVuQ0wu
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMzIsMzQgKzMzLDM4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIEZpbHRlckVmZmVjdDsKK2NsYXNzIEZpbHRlckVmZmVjdDsKIAot
ICAgIGNsYXNzIEZpbHRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlcj4gewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCB+RmlsdGVyKCkgeyB9Ci0KLSAgICAgICAgdm9pZCBzZXRTb3Vy
Y2VJbWFnZShQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUlt
YWdlID0gc291cmNlSW1hZ2U7IH0KLSAgICAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkg
eyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgICAgIEZsb2F0U2l6ZSBmaWx0
ZXJSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAg
ICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29s
dXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQotCi0gICAg
ICAgIHZpcnR1YWwgZmxvYXQgYXBwbHlIb3Jpem9udGFsU2NhbGUoZmxvYXQgdmFsdWUpIGNvbnN0
IHsgcmV0dXJuIHZhbHVlICogbV9maWx0ZXJSZXNvbHV0aW9uLndpZHRoKCk7IH0KLSAgICAgICAg
dmlydHVhbCBmbG9hdCBhcHBseVZlcnRpY2FsU2NhbGUoZmxvYXQgdmFsdWUpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlICogbV9maWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpOyB9Ci0gICAgICAgIAotICAg
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKLSAgICAgICAg
Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KLQotICAg
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGVmZmVjdEJvdW5k
aW5nQm94TW9kZSgpIGNvbnN0ID0gMDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKLSAgICAgICAgRmxvYXRTaXplIG1fZmlsdGVyUmVz
b2x1dGlvbjsKLSAgICB9OworY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVy
PiB7CitwdWJsaWM6CisgICAgRmlsdGVyKCkgeyBtX2ZpbHRlck9wZW5DTCA9IEZpbHRlck9wZW5D
TDo6Y3JlYXRlKCk7IH0KKyAgICB2aXJ0dWFsIH5GaWx0ZXIoKSB7IH0KKworICAgIHZvaWQgc2V0
U291cmNlSW1hZ2UoUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlSW1hZ2UpIHsgbV9zb3Vy
Y2VJbWFnZSA9IHNvdXJjZUltYWdlOyB9CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkg
eyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQorCisgICAgRmxvYXRTaXplIGZpbHRlclJl
c29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KKyAgICB2b2lk
IHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7
IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICAKKyAgICBGaWx0
ZXJPcGVuQ0wqIGZpbHRlck9wZW5DTCgpIHsgcmV0dXJuIG1fZmlsdGVyT3BlbkNMLmdldCgpOyB9
CisKKyAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5SG9yaXpvbnRhbFNjYWxlKGZsb2F0IHZhbHVlKSBj
b25zdCB7IHJldHVybiB2YWx1ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpOyB9CisgICAg
dmlydHVhbCBmbG9hdCBhcHBseVZlcnRpY2FsU2NhbGUoZmxvYXQgdmFsdWUpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlICogbV9maWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpOyB9CisgICAgCisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIEZs
b2F0UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3QgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgZWZmZWN0Qm91bmRpbmdCb3hNb2RlKCkgY29uc3QgPSAwOworCitw
cml2YXRlOgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOworICAgIFJlZlB0cjxGaWx0ZXJPcGVuQ0w+IG1fZmls
dGVyT3BlbkNMOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCShyZXZpc2lvbiA5NzQ3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTkg
Kzk3LDQyIEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiAKIEltYWdlQnVmZmVy
KiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogewotICAgIGlmICghaGFzUmVzdWx0KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICAvL2lmICghaGFzUmVzdWx0
KCkpCisgICAgLy8gICAgcmV0dXJuIDA7CisgICAgLy9pZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkK
KyAgICAvLyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQik7CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3Qo
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSwgZGVz
dGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFVubXVsdGlwbGllZEltYWdlRGF0
YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgp
LCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgIEZpbHRlck9wZW5DTCogb3BlbkNM
ID0gZmlsdGVyKCktPmZpbHRlck9wZW5DTCgpOworICAgIGNsX2NvbW1hbmRfcXVldWUgY2xRdWV1
ZSA9IG9wZW5DTC0+Y29tbWFuZFF1ZXVlKCk7CisgICAgY2xGaW5pc2goY2xRdWV1ZSk7CisgICAg
CisgICAgY2xfbWVtIHNyY0ltYWdlID0gb3BlbkNMLT5pbWFnZUZvckZpbHRlckVmZmVjdCh0aGlz
KTsKKyAgICAKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBieXRlQXJyYXkgPSBCeXRlQXJyYXk6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0Lmhl
aWdodCgpICogNCk7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IGJ5dGVBcnJheS0+ZGF0YSgp
OworICAgIAorICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gRmlsdGVyT3BlbkNMCisgICAgLy8g
UmVhZCBiYWNrIGRldmljZSBkYXRhIHRvIGhvc3QgYXMgaW1hZ2UuCisgICAgc2l6ZV90IHJlZ2lv
blszXSA9IHttX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
aGVpZ2h0KCksIDF9OworICAgIHNpemVfdCBvcmlnaW5bM10gPSB7MCwgMCwgMH07CisgICAgY2xF
bnF1ZXVlUmVhZEltYWdlKGNsUXVldWUsIHNyY0ltYWdlLCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lv
biwgMCwgMCwgZGF0YSwgMCwgMCwgMCk7CisgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGJ5dGVBcnJheS5nZXQoKSwgZGVzdGluYXRpb25SZWN0LnNpemUo
KSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICBvcGVuQ0wtPmNsZWFuVXAoKTsK
KworICAgIC8vaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgIC8vICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEobV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgLy9lbHNlCisgICAgLy8gICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0
KCksIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7
CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKK3ZvaWQgRmlsdGVy
RWZmZWN0OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJPcGVuQ0wqIG9wZW5D
TCA9IGZpbHRlcigpLT5maWx0ZXJPcGVuQ0woKTsKKyAgICBvcGVuQ0wtPmNyZWF0ZUltYWdlKGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpLCB0aGlzKTsKK30KKwogUGFzc1JlZlB0cjxCeXRlQXJy
YXk+IEZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChyZWN0KSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgJKHJldmlzaW9uIDk3NDc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBA
QCBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGCiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7CiAKKyAgICAvLyBGSVhNRTogTXVzdCBhbHdheXMgcmV0
dXJuIHRydWUgZm9yIE9wZW5DTC4KICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCB8fCBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsgfQogICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKICAgICBJ
bWFnZUJ1ZmZlciogYXNJbWFnZUJ1ZmZlcigpOwpAQCAtODEsNiArODIsMTAgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCkg
PSAwOworICAgIAorICAgIC8vIENhbiBiZSBwdXJlIG9uY2UgYW4gaW1wbGVtZW50YXRpb24gaXMg
Y29tcGxldGUuCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKSB7IH07CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCShyZXZpc2lvbiA5NzQ3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcg
QEAKICNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKKy8v
I2luY2x1ZGUgIkJ5dGVBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0yOSw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01MSwxOCArNTMsNTEgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0
KSk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6YXBwbHkoKQordm9pZCBTb3VyY2VHcmFwaGlj
OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGZpbHRlcigpLT5zb3VyY2VJbWFn
ZSgpOworICAgIEFTU0VSVChpbWFnZUJ1ZmZlcik7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0KElu
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBSZWZQdHI8Qnl0ZUFy
cmF5PiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShzb3VyY2VSZWN0KTsKKyAgICBGaWx0ZXJPcGVuQ0wqIG9wZW5DTCA9IGZpbHRlcigpLT5maWx0
ZXJPcGVuQ0woKTsKKyAgICBvcGVuQ0wtPmNyZWF0ZUltYWdlKHNvdXJjZVJlY3Quc2l6ZSgpLCB0
aGlzLCBzcmNQaXhlbEFycmF5LT5kYXRhKCkpOworfQorICAgIAordm9pZCBTb3VyY2VHcmFwaGlj
OjpwbGF0Zm9ybUFwcGx5T3BlbkdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAg
ICBpZiAoIXJlc3VsdEltYWdlIHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCiAgICAgICAgIHJl
dHVybjsKLQorICAgIAogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZUJ1ZmZl
cihmaWx0ZXItPnNvdXJjZUltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KCkp
OwogfQogCit2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KCkKK3sKKyAgICBpZiAoaGFzUmVzdWx0
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwor
CisgICAgLy8gc3lzdGVtU3VwcG9ydHNIV0FjY2VsZXJhdGlvbigpOgorICAgIC8vICogbXVzdCBi
ZSBzZXQgb25jZSBiZWZvcmUgY2FsbGluZyBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAvLyAq
IGNhbiBiZSBzdGF0aWMKKyAgICAvLyAqIGlzIGFuIGVudW1lcmF0aW9uIHdpdGggZGlmZmVyZW50
IHN1cHBvcnRhYmxlIEhXIGFjY2VsZXJhdGlvbiBwb3NpYmlsaXRpZXMuCisgICAgLy8gI2lmIFVT
RShPUEVOQ0wpCisgICAgLy8gaWYgKHN5c3RlbVN1cHBvcnRzSFdBY2NlbGVyYXRpb24oKSA9IE9w
ZW5DTFN1cHBvcnQpIHsKKyAgICBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisgICAgLy8gICAgIHJl
dHVybjsKKyAgICAvLyB9CisgICAgLy8gI2VuZGlmCisgICAgLy8gI2lmIFVTRShTb21ldGhpbmcg
ZWxzZSBsaWtlIE9wZW5HTCkKKyAgICAvLyBpZiAoY2hlY2sgb3RoZXIgSFcgYWNjZWxlcmF0aW9u
IGltcGxlbWVudGF0aW9ucykgeworICAgIC8vICAgICAuLi4KKyAgICAvLyAgICAgcmV0dXJuOwor
ICAgIC8vICNlbmRpZiAKKyAgICAvLyBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOworfQorCiB2b2lk
IFNvdXJjZUdyYXBoaWM6OmR1bXAoKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgJKHJldmlz
aW9uIDk3NDc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAgcHVibGljOiAg
ICAgICAgCiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVt
cCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vcGVuY2wvRmlsdGVyT3BlbkNM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL29wZW5jbC9GaWx0ZXJPcGVuQ0wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vcGVuY2wvRmlsdGVyT3BlbkNMLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPcGVuQ0wuaCIKKyNpbmNsdWRlIDxPcGVuQ0wvb3Bl
bmNsLmg+CisKKyNpZiBFTkFCTEUoRklMVEVSUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBjaGFyICpLZXJuZWxTb3VyY2UyID0gICAgICAgICAgICAgICJcbiIgXAorIl9fa2VybmVs
IHZvaWQgbHVtaW5hbmNlKF9fcmVhZF9vbmx5ICBpbWFnZTJkX3Qgc3JjSW1hZ2UsXG4iIFwKKyIg
ICAgICAgICAgICAgICAgICAgICAgICBfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRzdEltYWdlLFxu
IiBcCisiICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcl90IHNhbXBsZXIpXG4iIFwKKyJ7
XG4iIFwKKyIgICAgaW50MiBwb3MgPSAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2Jh
bF9pZCgxKSk7XG4iIFwKKyIgICAgZmxvYXQ0IGMgPSByZWFkX2ltYWdlZihzcmNJbWFnZSwgc2Ft
cGxlciwgcG9zKTtcbiIgXAorIlxuIiBcCisiICAgIGZsb2F0NCBuZXdDb2xvciA9IChmbG9hdDQp
KDAsIDAsIDAsIChjLnggKiAwLjIxMjVmICsgYy55ICogMC43NTRmICsgYy56ICogMC4wNzJmKSAq
IGMudyk7XG4iIFwKKyIgICAgd3JpdGVfaW1hZ2VmKGRzdEltYWdlLCBwb3MsIG5ld0NvbG9yKTtc
biIgXAorIn1cbiIgXAorIl9fa2VybmVsIHZvaWQgc2F0dXJhdGUoX19yZWFkX29ubHkgIGltYWdl
MmRfdCBzcmNJbWFnZSxcbiIgXAorIiAgICAgICAgICAgICAgICAgICAgICAgX193cml0ZV9vbmx5
IGltYWdlMmRfdCBkc3RJbWFnZSxcbiIgXAorIiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZmxvYXQgcyxcbiIgXAorIiAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcl90IHNhbXBsZXIp
XG4iIFwKKyJ7XG4iIFwKKyIJaW50MiBwb3MgPSAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0
X2dsb2JhbF9pZCgxKSk7XG4iIFwKKyIJZmxvYXQ0IGMgPSByZWFkX2ltYWdlZihzcmNJbWFnZSwg
c2FtcGxlciwgcG9zKTtcbiIgXAorIglcbiIgXAorIglmbG9hdDQgbmV3Q29sb3IgPSAoZmxvYXQ0
KSgoMC4yMTNmICsgMC43ODdmICogcykgKiBjLnggKyAoMC43MTVmIC0gMC43MTVmICogcykgKiBj
LnkgKyAoMC4wNzJmIC0gMC4wNzJmICogcykgKiBjLnosXG4iIFwKKyIJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDAuMjEzZiAtIDAuMjEzZiAqIHMpICogYy54ICsgKDAuNzE1ZiArIDAuMjg1
ZiAqIHMpICogYy55ICsgKDAuMDcyZiAtIDAuMDcyZiAqIHMpICogYy56LFxuIiBcCisiCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgwLjIxM2YgLSAwLjIxM2YgKiBzKSAqIGMueCArICgwLjcx
NWYgLSAwLjcxNWYgKiBzKSAqIGMueSArICgwLjA3MmYgKyAwLjkyOGYgKiBzKSAqIGMueixcbiIg
XAorIgkgICAgICAgICAgICAgICAgICAgICAgICAgICBjLncpO1xuIiBcCisiICAgIHdyaXRlX2lt
YWdlZihkc3RJbWFnZSwgcG9zLCBuZXdDb2xvcik7XG4iIFwKKyJ9XG4iIFwKKyJcbiI7CisgICAg
CitGaWx0ZXJPcGVuQ0w6OkZpbHRlck9wZW5DTCgpCit7CisgICAgY3JlYXRlUHJvZ3JhbSgpOwor
fQorCit2b2lkIEZpbHRlck9wZW5DTDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgY2xfZGV2aWNl
X2lkIGNsRGV2aWNlSWQ7CisgICAgY2xfaW50IGVycm9yID0gY2xHZXREZXZpY2VJRHMoMCwgQ0xf
REVWSUNFX1RZUEVfR1BVLCAxLCAmY2xEZXZpY2VJZCwgMCk7CisgICAgZXJyb3JDb2RlKGVycm9y
KTsKKyAgICBpZiAoZXJyb3IgIT0gQ0xfU1VDQ0VTUykgeworICAgICAgICBjbGVhblVwKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jbENvbnRleHQgPSBjbENyZWF0ZUNv
bnRleHQoMCwgMSwgJmNsRGV2aWNlSWQsIDAsIDAsICZlcnJvcik7CisgICAgZXJyb3JDb2RlKGVy
cm9yKTsKKyAgICBpZiAoIW1fY2xDb250ZXh0KSB7CisgICAgICAgIGNsZWFuVXAoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NsQ29tbWFuZFF1ZXVlID0gY2xDcmVhdGVD
b21tYW5kUXVldWUobV9jbENvbnRleHQsIGNsRGV2aWNlSWQsIDAsICZlcnJvcik7CisgICAgZXJy
b3JDb2RlKGVycm9yKTsKKyAgICBpZiAoIW1fY2xDb21tYW5kUXVldWUpIHsKKyAgICAgICAgY2xl
YW5VcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY2xQcm9ncmFtID0g
Y2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShtX2NsQ29udGV4dCwgMSwgKGNvbnN0IGNoYXIgKiop
ICYgS2VybmVsU291cmNlMiwgMCwgJmVycm9yKTsKKyAgICBlcnJvckNvZGUoZXJyb3IpOworICAg
IGlmICghbV9jbFByb2dyYW0pIHsKKyAgICAgICAgY2xlYW5VcCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGVycm9yID0gY2xCdWlsZFByb2dyYW0obV9jbFByb2dyYW0sIDAs
IDAsIDAsIDAsIDApOworICAgIGVycm9yQ29kZShlcnJvcik7CisgICAgaWYgKGVycm9yICE9IENM
X1NVQ0NFU1MpIHsKKyAgICAgICAgY2xlYW5VcCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIG1faW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgPSBDTF9VTk9S
TV9JTlQ4OworICAgIG1faW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5lbF9vcmRlciA9IENMX1JHQkE7
CisgICAgCisgICAgLy8gQ3JlYXRlIHNhbXBsZXIgZm9yIHJlYWRpbmcgaW5wdXQgaW1hZ2UgcGl4
ZWwgZGF0YS4KKyAgICBtX2NsU2FtcGxlciA9IGNsQ3JlYXRlU2FtcGxlcihtX2NsQ29udGV4dCwg
Q0xfRkFMU0UsIENMX0FERFJFU1NfQ0xBTVAsIENMX0ZJTFRFUl9ORUFSRVNULCAmZXJyb3IpOwor
ICAgIGVycm9yQ29kZShlcnJvcik7Cit9CisKK3ZvaWQgRmlsdGVyT3BlbkNMOjphZGRLZXJuZWxU
b0NvbW1hbmRRdWV1ZShjbF9rZXJuZWwgY2xLZXJuZWwpCit7CisgICAgLy8gRklYTUU6IEF0IGxl
YXN0IGNsTG9jYWxXb3JrU2l6ZSBkb24ndCBuZWVkIHRvIGdldCBjYWxjdWxhdGVkIG9uIHZlcnkg
c2luZ2xlIGVmZmVjdC4KKyAgICBzaXplX3QgY2xMb2NhbFdvcmtTaXplWzJdID0gezEsIDF9Owor
ICAgIC8vIEdldCB0aGUgbWF4aW11bSB3b3JrIGdyb3VwIHNpemUgZm9yIGV4ZWN1dGluZyB0aGUg
a2VybmVsIG9uIHRoZSBkZXZpY2UKKyAgICAvLyBlcnJvciA9IGNsR2V0S2VybmVsV29ya0dyb3Vw
SW5mbyhjbEtlcm5lbCwgY2xEZXZpY2VJZCwgQ0xfS0VSTkVMX1dPUktfR1JPVVBfU0laRSwgc2l6
ZW9mKHNpemVfdCksICZjbExvY2FsV29ya1NpemUsIDApOworICAgIC8vIGVycm9yQ29kZShlcnJv
cik7CisgICAgCisgICAgLy9pZiAoZXJyb3IgIT0gQ0xfU1VDQ0VTUykKKyAgICAvLyAgICByZXR1
cm47CisgICAgCisgICAgLy8gR2xvYmFsIHdvcmsgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2Yg
bG9jYWwgd29yayBzaXplLgorICAgIHNpemVfdCBjbEdsb2JhbFdvcmtTaXplWzJdID0ge2tNYXhG
aWx0ZXJTaXplLCBrTWF4RmlsdGVyU2l6ZX07CisgICAgY2xfaW50IGVycm9yID0gY2xFbnF1ZXVl
TkRSYW5nZUtlcm5lbChtX2NsQ29tbWFuZFF1ZXVlLCBjbEtlcm5lbCwgMiwgMCwgY2xHbG9iYWxX
b3JrU2l6ZSwgY2xMb2NhbFdvcmtTaXplLCAwLCAwLCAwKTsKKyAgICBlcnJvckNvZGUoZXJyb3Ip
OworICAgIAorICAgIG1fY2xLZXJuZWxzLmFwcGVuZChjbEtlcm5lbCk7Cit9CisKK3ZvaWQgRmls
dGVyT3BlbkNMOjpmaW5hbGl6ZVF1ZXVlKCkKK3sKKyAgICBjbEZpbmlzaChtX2NsQ29tbWFuZFF1
ZXVlKTsKK30KKworY2xfbWVtIEZpbHRlck9wZW5DTDo6Y3JlYXRlSW1hZ2UoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QsIHVuc2lnbmVkIGNoYXIqIGRhdGEp
Cit7CisgICAgY2xfaW50IGVycm9yID0gQ0xfU1VDQ0VTUzsKKyAgICBjbF9tZW0gY2xJbWFnZTsK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgY2xJbWFnZSA9IGNsQ3JlYXRlSW1hZ2UyRChtX2NsQ29u
dGV4dCwgQ0xfTUVNX1JFQURfV1JJVEUgfCBDTF9NRU1fQ09QWV9IT1NUX1BUUiwgJm1faW1hZ2VG
b3JtYXQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplLndpZHRoKCkgKiA0ICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLCBk
YXRhLCAmZXJyb3IpOworICAgIGVsc2UKKyAgICAgICAgY2xJbWFnZSA9IGNsQ3JlYXRlSW1hZ2Uy
RChtX2NsQ29udGV4dCwgQ0xfTUVNX1JFQURfV1JJVEUsICZtX2ltYWdlRm9ybWF0LCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIDAsICZlcnJvcik7CisgICAgZXJyb3JDb2RlKGVycm9y
KTsKKyAgICBtX2ltYWdlVG9GaWx0ZXJFZmZlY3RNYXAuYWRkKGZpbHRlckVmZmVjdCwgY2xJbWFn
ZSk7CisgICAgcmV0dXJuIGNsSW1hZ2U7Cit9CisKK3ZvaWQgRmlsdGVyT3BlbkNMOjpjb3B5SW1h
Z2UoY2xfbWVtIHNyY0ltYWdlLCBjbF9tZW0gZHN0SW1hZ2UsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QpCit7CisgICAgSW50UmVjdCBpbnRlcnNlY3Rpb25S
ZWN0ID0gZHN0UmVjdDsKKyAgICBpbnRlcnNlY3Rpb25SZWN0LmludGVyc2VjdChzcmNSZWN0KTsK
KyAgICBpZiAoaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpbnRlcnNlY3Rpb25SZWN0Lm1vdmVCeSgtZHN0UmVjdC5sb2NhdGlvbigpKTsKKyAgICAKKyAg
ICBzaXplX3Qgc3JjT3JpZ2luWzNdID0gezAsIDAsIDB9OworICAgIHNpemVfdCBkc3RPcmlnaW5b
M10gPSB7MCwgMCwgMH07CisgICAgc2l6ZV90IHJlZ2lvblszXSA9IHtpbnRlcnNlY3Rpb25SZWN0
LndpZHRoKCksIGludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCksIDF9OworICAgIAorICAgIGlmIChp
bnRlcnNlY3Rpb25SZWN0LngoKSA8IDApCisgICAgICAgIHNyY09yaWdpblswXSA9IGRzdFJlY3Qu
eCgpIC0gc3JjUmVjdC54KCk7CisgICAgZWxzZQorICAgICAgICBkc3RPcmlnaW5bMF0gPSBpbnRl
cnNlY3Rpb25SZWN0LngoKTsKKyAgICAKKyAgICBpZiAoaW50ZXJzZWN0aW9uUmVjdC55KCkgPCAw
KQorICAgICAgICBzcmNPcmlnaW5bMV0gPSBkc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpOworICAg
IGVsc2UKKyAgICAgICAgZHN0T3JpZ2luWzFdID0gaW50ZXJzZWN0aW9uUmVjdC55KCk7CisKKyAg
ICBjbF9pbnQgZXJyb3IgPSBjbEVucXVldWVDb3B5SW1hZ2UobV9jbENvbW1hbmRRdWV1ZSwgc3Jj
SW1hZ2UsIGRzdEltYWdlLCBzcmNPcmlnaW4sIGRzdE9yaWdpbiwgcmVnaW9uLCAwLCAwLCAwKTsK
KyAgICBlcnJvckNvZGUoZXJyb3IpOworfQorCitjbF9tZW0gRmlsdGVyT3BlbkNMOjppbWFnZUZv
ckZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKK3sKKyAgICBBU1NFUlQoZWZmZWN0
KTsKKyAgICByZXR1cm4gbV9pbWFnZVRvRmlsdGVyRWZmZWN0TWFwLmdldChlZmZlY3QpOworfQor
Cit2b2lkIEZpbHRlck9wZW5DTDo6Y2xlYW5VcCgpCit7CisgICAgLy8gRklYTUU6IGNsX21lbSBh
bmQgY2xfa2VybmVsIG1pc3NpbmcuCisgICAgSGFzaE1hcDxGaWx0ZXJFZmZlY3QqLCBjbF9tZW0+
OjppdGVyYXRvciBlbmQgPSBtX2ltYWdlVG9GaWx0ZXJFZmZlY3RNYXAuZW5kKCk7CisgICAgZm9y
IChIYXNoTWFwPEZpbHRlckVmZmVjdCosIGNsX21lbT46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9p
bWFnZVRvRmlsdGVyRWZmZWN0TWFwLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRv
cikKKyAgICAgICAgY2xSZWxlYXNlTWVtT2JqZWN0KGl0ZXJhdG9yLT5zZWNvbmQpOworICAgIAor
ICAgIGZvciAoaW50IGkgPSBtX2NsS2VybmVscy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBjbFJlbGVhc2VLZXJuZWwobV9jbEtlcm5lbHNbaV0pOworICAgICAgICBtX2NsS2Vy
bmVscy5yZW1vdmVMYXN0KCk7CisgICAgfQorCisgICAgY2xSZWxlYXNlUHJvZ3JhbShtX2NsUHJv
Z3JhbSk7CisgICAgY2xSZWxlYXNlQ29tbWFuZFF1ZXVlKG1fY2xDb21tYW5kUXVldWUpOworICAg
IGNsUmVsZWFzZUNvbnRleHQobV9jbENvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJP
cGVuQ0w6OkZpbHRlck9wZW5DTDo6ZXJyb3JDb2RlKGNsX2ludCBlcnJvcikgeworICAgIC8vIEp1
c3QgZm9yIGRlYnVnZ2luZy4KKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBDTF9TVUND
RVNTOiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTdWNjZXNzIVxuIik7cmV0dXJu
OworICAgIGNhc2UgQ0xfREVWSUNFX05PVF9GT1VORDogICAgICAgICAgICAgICAgIHByaW50Zigi
RGV2aWNlIG5vdCBmb3VuZC5cbiIpO3JldHVybjsKKyAgICBjYXNlIENMX0RFVklDRV9OT1RfQVZB
SUxBQkxFOiAgICAgICAgICAgICBwcmludGYoIkRldmljZSBub3QgYXZhaWxhYmxlXG4iKTtyZXR1
cm47CisgICAgY2FzZSBDTF9DT01QSUxFUl9OT1RfQVZBSUxBQkxFOiAgICAgICAgICAgcHJpbnRm
KCJDb21waWxlciBub3QgYXZhaWxhYmxlXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9NRU1fT0JK
RUNUX0FMTE9DQVRJT05fRkFJTFVSRTogICAgcHJpbnRmKCJNZW1vcnkgb2JqZWN0IGFsbG9jYXRp
b24gZmFpbHVyZVxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfT1VUX09GX1JFU09VUkNFUzogICAg
ICAgICAgICAgICAgIHByaW50ZigiT3V0IG9mIHJlc291cmNlc1xuIik7cmV0dXJuOworICAgIGNh
c2UgQ0xfT1VUX09GX0hPU1RfTUVNT1JZOiAgICAgICAgICAgICAgIHByaW50ZigiT3V0IG9mIGhv
c3QgbWVtb3J5XG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9QUk9GSUxJTkdfSU5GT19OT1RfQVZB
SUxBQkxFOiAgICAgcHJpbnRmKCJQcm9maWxpbmcgaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZVxu
Iik7cmV0dXJuOworICAgIGNhc2UgQ0xfTUVNX0NPUFlfT1ZFUkxBUDogICAgICAgICAgICAgICAg
IHByaW50ZigiTWVtb3J5IGNvcHkgb3ZlcmxhcFxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU1B
R0VfRk9STUFUX01JU01BVENIOiAgICAgICAgICAgIHByaW50ZigiSW1hZ2UgZm9ybWF0IG1pc21h
dGNoXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTUFHRV9GT1JNQVRfTk9UX1NVUFBPUlRFRDog
ICAgICAgcHJpbnRmKCJJbWFnZSBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIik7cmV0dXJuOworICAg
IGNhc2UgQ0xfQlVJTERfUFJPR1JBTV9GQUlMVVJFOiAgICAgICAgICAgIHByaW50ZigiUHJvZ3Jh
bSBidWlsZCBmYWlsdXJlXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9NQVBfRkFJTFVSRTogICAg
ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJNYXAgZmFpbHVyZVxuIik7cmV0dXJuOworICAgIGNh
c2UgQ0xfSU5WQUxJRF9WQUxVRTogICAgICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCB2
YWx1ZVxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU5WQUxJRF9ERVZJQ0VfVFlQRTogICAgICAg
ICAgICAgIHByaW50ZigiSW52YWxpZCBkZXZpY2UgdHlwZVxuIik7cmV0dXJuOworICAgIGNhc2Ug
Q0xfSU5WQUxJRF9QTEFURk9STTogICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBwbGF0
Zm9ybVxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU5WQUxJRF9ERVZJQ0U6ICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiSW52YWxpZCBkZXZpY2VcbiIpO3JldHVybjsKKyAgICBjYXNlIENMX0lO
VkFMSURfQ09OVEVYVDogICAgICAgICAgICAgICAgICBwcmludGYoIkludmFsaWQgY29udGV4dFxu
Iik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU5WQUxJRF9RVUVVRV9QUk9QRVJUSUVTOiAgICAgICAg
IHByaW50ZigiSW52YWxpZCBxdWV1ZSBwcm9wZXJ0aWVzXG4iKTtyZXR1cm47CisgICAgY2FzZSBD
TF9JTlZBTElEX0NPTU1BTkRfUVVFVUU6ICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGNvbW1h
bmQgcXVldWVcbiIpO3JldHVybjsKKyAgICBjYXNlIENMX0lOVkFMSURfSE9TVF9QVFI6ICAgICAg
ICAgICAgICAgICBwcmludGYoIkludmFsaWQgaG9zdCBwb2ludGVyXG4iKTtyZXR1cm47CisgICAg
Y2FzZSBDTF9JTlZBTElEX01FTV9PQkpFQ1Q6ICAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlk
IG1lbW9yeSBvYmplY3RcbiIpO3JldHVybjsKKyAgICBjYXNlIENMX0lOVkFMSURfSU1BR0VfRk9S
TUFUX0RFU0NSSVBUT1I6ICBwcmludGYoIkludmFsaWQgaW1hZ2UgZm9ybWF0IGRlc2NyaXB0b3Jc
biIpO3JldHVybjsKKyAgICBjYXNlIENMX0lOVkFMSURfSU1BR0VfU0laRTogICAgICAgICAgICAg
ICBwcmludGYoIkludmFsaWQgaW1hZ2Ugc2l6ZVxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU5W
QUxJRF9TQU1QTEVSOiAgICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBzYW1wbGVyXG4i
KTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX0JJTkFSWTogICAgICAgICAgICAgICAgICAg
cHJpbnRmKCJJbnZhbGlkIGJpbmFyeVxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU5WQUxJRF9C
VUlMRF9PUFRJT05TOiAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBidWlsZCBvcHRpb25zXG4i
KTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX1BST0dSQU06ICAgICAgICAgICAgICAgICAg
cHJpbnRmKCJJbnZhbGlkIHByb2dyYW1cbiIpO3JldHVybjsKKyAgICBjYXNlIENMX0lOVkFMSURf
UFJPR1JBTV9FWEVDVVRBQkxFOiAgICAgICBwcmludGYoIkludmFsaWQgcHJvZ3JhbSBleGVjdXRh
YmxlXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX0tFUk5FTF9OQU1FOiAgICAgICAg
ICAgICAgcHJpbnRmKCJJbnZhbGlkIGtlcm5lbCBuYW1lXG4iKTtyZXR1cm47CisgICAgY2FzZSBD
TF9JTlZBTElEX0tFUk5FTF9ERUZJTklUSU9OOiAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGtlcm5l
bCBkZWZpbml0aW9uXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX0tFUk5FTDogICAg
ICAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGtlcm5lbFxuIik7cmV0dXJuOworICAgIGNh
c2UgQ0xfSU5WQUxJRF9BUkdfSU5ERVg6ICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBh
cmd1bWVudCBpbmRleFxuIik7cmV0dXJuOworICAgIGNhc2UgQ0xfSU5WQUxJRF9BUkdfVkFMVUU6
ICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBhcmd1bWVudCB2YWx1ZVxuIik7cmV0dXJu
OworICAgIGNhc2UgQ0xfSU5WQUxJRF9BUkdfU0laRTogICAgICAgICAgICAgICAgIHByaW50Zigi
SW52YWxpZCBhcmd1bWVudCBzaXplXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX0tF
Uk5FTF9BUkdTOiAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGtlcm5lbCBhcmd1bWVudHNc
biIpO3JldHVybjsKKyAgICBjYXNlIENMX0lOVkFMSURfV09SS19ESU1FTlNJT046ICAgICAgICAg
ICBwcmludGYoIkludmFsaWQgd29yayBkaW1lbnNpb25cbiIpO3JldHVybjsKKyAgICBjYXNlIENM
X0lOVkFMSURfV09SS19HUk9VUF9TSVpFOiAgICAgICAgICBwcmludGYoIkludmFsaWQgd29yayBn
cm91cCBzaXplXG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX1dPUktfSVRFTV9TSVpF
OiAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIHdvcmsgaXRlbSBzaXplXG4iKTtyZXR1cm47Cisg
ICAgY2FzZSBDTF9JTlZBTElEX0dMT0JBTF9PRkZTRVQ6ICAgICAgICAgICAgcHJpbnRmKCJJbnZh
bGlkIGdsb2JhbCBvZmZzZXRcbiIpO3JldHVybjsKKyAgICBjYXNlIENMX0lOVkFMSURfRVZFTlRf
V0FJVF9MSVNUOiAgICAgICAgICBwcmludGYoIkludmFsaWQgZXZlbnQgd2FpdCBsaXN0XG4iKTty
ZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX0VWRU5UOiAgICAgICAgICAgICAgICAgICAgcHJp
bnRmKCJJbnZhbGlkIGV2ZW50XG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX09QRVJB
VElPTjogICAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIG9wZXJhdGlvblxuIik7cmV0dXJu
OworICAgIGNhc2UgQ0xfSU5WQUxJRF9HTF9PQkpFQ1Q6ICAgICAgICAgICAgICAgIHByaW50Zigi
SW52YWxpZCBPcGVuR0wgb2JqZWN0XG4iKTtyZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX0JV
RkZFUl9TSVpFOiAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGJ1ZmZlciBzaXplXG4iKTty
ZXR1cm47CisgICAgY2FzZSBDTF9JTlZBTElEX01JUF9MRVZFTDogICAgICAgICAgICAgICAgcHJp
bnRmKCJJbnZhbGlkIG1pcC1tYXAgbGV2ZWxcbiIpO3JldHVybjsKKyAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlVua25vd25cbiIpOworICAgIH0K
K30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxU
RVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vcGVu
Y2wvRmlsdGVyT3BlbkNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9vcGVuY2wvRmlsdGVyT3BlbkNMLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29wZW5jbC9GaWx0ZXJPcGVu
Q0wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBGaWx0ZXJPcGVuQ0xfaAorI2RlZmluZSBGaWx0ZXJPcGVuQ0xfaAorCisjaWYgRU5BQkxF
KEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisKKyNpbmNsdWRlIDxPcGVuQ0wv
b3BlbmNsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlck9wZW5DTCA6IHB1
YmxpYyBSZWZDb3VudGVkPEZpbHRlck9wZW5DTD4geworcHVibGljOgorICAgIH5GaWx0ZXJPcGVu
Q0woKSB7IGNsZWFuVXAoKTsgfQorICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbHRlck9w
ZW5DTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEZpbHRlck9wZW5DTCgpKTsgfQor
ICAgIAorICAgIGNsX3Byb2dyYW0gcHJvZ3JhbSgpIHsgcmV0dXJuIG1fY2xQcm9ncmFtOyB9Cisg
ICAgY2xfY29udGV4dCBjb250ZXh0KCkgeyByZXR1cm4gbV9jbENvbnRleHQ7IH0KKyAgICBjbF9z
YW1wbGVyIHNhbXBsZXIoKSB7IHJldHVybiBtX2NsU2FtcGxlcjsgfQorICAgIAorICAgIC8vIEZJ
WE1FOiBXb24ndCBiZSBuZWNlc3NhcnkgaW4gdGhlIGZ1dHVyZS4KKyAgICBjbF9jb21tYW5kX3F1
ZXVlIGNvbW1hbmRRdWV1ZSgpIHsgcmV0dXJuIG1fY2xDb21tYW5kUXVldWU7IH0KKworICAgIHZv
aWQgZmluYWxpemVRdWV1ZSgpOworICAgIHZvaWQgY2xlYW5VcCgpOworCisgICAgdm9pZCBhZGRL
ZXJuZWxUb0NvbW1hbmRRdWV1ZShjbF9rZXJuZWwpOworICAgIGNsX21lbSBpbWFnZUZvckZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3QqKTsKKworICAgIGNsX21lbSBjcmVhdGVJbWFnZShjb25zdCBJ
bnRTaXplJiwgRmlsdGVyRWZmZWN0KiwgdW5zaWduZWQgY2hhciogPSAwKTsKKyAgICB2b2lkIGNv
cHlJbWFnZShjbF9tZW0gLypzcmNJbWFnZSovLCBjbF9tZW0gLypkc3RJbWFnZSovLCBjb25zdCBJ
bnRSZWN0JiAvKnNyY1JlY3QqLywgY29uc3QgSW50UmVjdCYgLypkc3RSZWN0Ki8pOworICAgIAor
cHJpdmF0ZToKKyAgICBGaWx0ZXJPcGVuQ0woKTsKKworICAgIHZvaWQgY3JlYXRlUHJvZ3JhbSgp
OworICAgIHZvaWQgZXJyb3JDb2RlKGNsX2ludCk7CisKKyAgICBjbF9jb250ZXh0IG1fY2xDb250
ZXh0OworICAgIGNsX3Byb2dyYW0gbV9jbFByb2dyYW07CisgICAgY2xfc2FtcGxlciBtX2NsU2Ft
cGxlcjsKKyAgICBjbF9jb21tYW5kX3F1ZXVlIG1fY2xDb21tYW5kUXVldWU7CisgICAgY2xfaW1h
Z2VfZm9ybWF0IG1faW1hZ2VGb3JtYXQ7CisgICAgCisgICAgCisgICAgSGFzaE1hcDxGaWx0ZXJF
ZmZlY3QqLCBjbF9tZW0+IG1faW1hZ2VUb0ZpbHRlckVmZmVjdE1hcDsKKyAgICBWZWN0b3I8Y2xf
a2VybmVsPiBtX2NsS2VybmVsczsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIEZpbHRlck9wZW5DTF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116590</attachid>
            <date>2011-11-25 03:58:34 -0800</date>
            <delta_ts>2011-11-25 03:58:34 -0800</delta_ts>
            <desc>Set of new files for OpenCL support</desc>
            <filename>common_files_added.patch</filename>
            <type>text/plain</type>
            <size>34750</size>
            <attacher name="Giulio Urlini">sentangeleyes</attacher>
            
              <data encoding="base64">ZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1y
OTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvb2NsSGVs
cGVyLmNwcAoqKiogb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL29jbC9vY2xIZWxwZXIuY3BwCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmNwcAkyMDExLTEx
LTI0IDE4OjAwOjAzLjY1MDk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDAgKioqKgot
LS0gMSw2MDAgLS0tLQorIC8qCisgICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1pY3JvZWxlY3Ry
b25pY3MgLSBBdXRob3JzOiBEYXZpZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwuY29tPiwgU3Vy
aW5kZXIgUGFsIFNpbmdoIDxzdXJpbmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1bGlvIFVybGlu
aSA8Z2l1bGlvLnVybGluaUBzdC5jb20+CisgICoKKyAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICoKKyAgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICoK
KyAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICAqLworIAorICNpbmNsdWRlICJjb25m
aWcuaCIKKyAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAKKyAjaW5jbHVkZSAib2NsSGVscGVyLmgi
CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgI2lmIFVTRV9DX1BST0ZJTElORworIHN0cnVjdCB0
aW1lc3BlYyB0aW1lX2RpZmYoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMg
ZW5kKQorIHsKKyAJc3RydWN0IHRpbWVzcGVjIHRlbXA7CisgCWlmICgoZW5kLnR2X25zZWMtc3Rh
cnQudHZfbnNlYyk8MCkgeworIAkJdGVtcC50dl9zZWMgPSBlbmQudHZfc2VjLXN0YXJ0LnR2X3Nl
Yy0xOworIAkJdGVtcC50dl9uc2VjID0gMTAwMDAwMDAwMCtlbmQudHZfbnNlYy1zdGFydC50dl9u
c2VjOworIAl9IGVsc2UgeworIAkJdGVtcC50dl9zZWMgPSBlbmQudHZfc2VjLXN0YXJ0LnR2X3Nl
YzsKKyAJCXRlbXAudHZfbnNlYyA9IGVuZC50dl9uc2VjLXN0YXJ0LnR2X25zZWM7CisgCX0KKyAJ
cmV0dXJuIHRlbXA7CisgfQorICNlbmRpZiAvLyBVU0VfQ19QUk9GSUxJTkcKKyAKKyB2b2lkIE9D
TExheWVyOjpvcGVuY2xTZXR1cENvbW1vbigpCisgeworIAllcnJvciA9IGNsR2V0UGxhdGZvcm1J
RHMoMSwgJnBsYXRmb3JtLCBOVUxMKTsKKyAJaWYoZXJyb3IgIT0gQ0xfU1VDQ0VTUykge2Zwcmlu
dGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xHZXRQbGF0Zm9ybUlEczogIik7IG9wZW5jbFByaW50RXJy
b3IoKTt9CisgCisgCWVycm9yID0gY2xHZXREZXZpY2VJRHMocGxhdGZvcm0sIENMX0RFVklDRV9U
WVBFX0dQVSwgMSwgJmRldmljZSwgTlVMTCk7CisgCWlmKGVycm9yICE9IENMX1NVQ0NFU1MpIHtm
cHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsR2V0RGV2aWNlSURzOiAiKTsgb3BlbmNsUHJpbnRF
cnJvcigpO30KKyAKKyAJY29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dCgwLCAxLCAmZGV2aWNlLCBO
VUxMLCBOVUxMLCAmZXJyb3IpOworIAlpZihlcnJvciAhPSBDTF9TVUNDRVNTKSB7ZnByaW50Zihz
dGRlcnIsICJFcnJvciBhdCBjbENyZWF0ZUNvbnRleHQ6ICIpOyBvcGVuY2xQcmludEVycm9yKCk7
fQorIAorIAljb21tYW5kX3F1ZXVlID0gY2xDcmVhdGVDb21tYW5kUXVldWUoY29udGV4dCwgZGV2
aWNlLCBDTF9RVUVVRV9QUk9GSUxJTkdfRU5BQkxFLCAmZXJyb3IpOworIAlpZihlcnJvciAhPSBD
TF9TVUNDRVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbENyZWF0ZUNvbW1hbmRRdWV1
ZTogIik7IG9wZW5jbFByaW50RXJyb3IoKTt9CisgfQorIAorIHZvaWQgT0NMTGF5ZXI6Om9wZW5j
bFNldHVwUHJvZ3JhbShjbF9wcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBjaGFyKiBmaWxlbmFtZSkK
KyB7CisgCW9wZW5jbFNldHVwUHJvZ3JhbShwcm9ncmFtLCBmaWxlbmFtZSwgIi1jbC1mYXN0LXJl
bGF4ZWQtbWF0aCIpOworIH0KKyB2b2lkIE9DTExheWVyOjpvcGVuY2xTZXR1cFByb2dyYW0oY2xf
cHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGNvbXBp
bGVPcHRpb25zKQorIHsKKyAJRklMRSAqIGZwID0gTlVMTDsKKyAJY2hhciAqcERhdGEgPSBOVUxM
OworIAljaGFyICpyZXN1bHQgPSBOVUxMOworIAlzaXplX3QgcmV0dXJuU2l6ZT0wOworIAlsb25n
IGxSZXQgPSAwLCBmaWxlc2l6ZSA9IDA7CisgCisgCWZwID0gZm9wZW4oZmlsZW5hbWUsInIiKTsK
KyAJaWYoZnAgPT0gTlVMTCkge2ZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4ga2VybmVs
IHNvdXJjZSBmaWxlOiAlcyIsIGZpbGVuYW1lKTsgZXhpdChFWElUX0ZBSUxVUkUpO30KKyAKKyAJ
ZnNlZWsoZnAsIDAsIFNFRUtfRU5EKTsKKyAJZmlsZXNpemUgPSBmdGVsbChmcCk7CisgCWZzZWVr
KGZwLCAwLCBTRUVLX1NFVCk7CisgCXBEYXRhID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIp
KihmaWxlc2l6ZSArIDIpKTsKKyAJbFJldCA9IGZyZWFkKHBEYXRhLCBzaXplb2YoY2hhciksIGZp
bGVzaXplLCBmcCk7CisgCXBEYXRhW2ZpbGVzaXplXSA9ICdcMCc7CisgCWZjbG9zZShmcCk7Cisg
CisgCSpwcm9ncmFtID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LCAxLCAoY29u
c3QgY2hhciAqKikgJnBEYXRhLCBOVUxMLCAmZXJyb3IpOworIAlpZihlcnJvciAhPSBDTF9TVUND
RVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbENyZWF0ZVByb2dyYW1XaXRoU291cmNl
OiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyAKKyAJZXJyb3IgPSBjbEJ1aWxkUHJvZ3JhbSgq
cHJvZ3JhbSwgMCwgTlVMTCwgY29tcGlsZU9wdGlvbnMsIE5VTEwsIE5VTEwpOworIAlpZihlcnJv
ciAhPSBDTF9TVUNDRVNTKQorIAl7CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGJ1aWxk
IHByb2dyYW0iKTsKKyAJCXJlc3VsdCA9IChjaGFyICopbWFsbG9jKDE8PDE2KTsKKyAJCWVycm9y
ID0gY2xHZXRQcm9ncmFtQnVpbGRJbmZvKCpwcm9ncmFtLCBkZXZpY2UsIENMX1BST0dSQU1fQlVJ
TERfTE9HLCAxPDwxNiAsIHJlc3VsdCwgJnJldHVyblNpemUpOworIAkJaWYoZXJyb3IgIT0gQ0xf
U1VDQ0VTUykge2ZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xHZXRQcm9ncmFtQnVpbGRJbmZv
OiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyAJCWlmKHJldHVyblNpemUgPiAwKQorIAkJewor
IAkJCWZwcmludGYoc3RkZXJyLCJDb21waWxhdGlvbiBsb2c6ICVzICAlZCAoJWQpXG4iLHJlc3Vs
dCwgKGludCkgcmV0dXJuU2l6ZSwxPDwxNik7CisgCQl9CisgCQlleGl0KEVYSVRfRkFJTFVSRSk7
CisgCX0KKyB9CisgCisgdm9pZCBPQ0xMYXllcjo6b3BlbmNsU2V0dXBLZXJuZWwoY2xfcHJvZ3Jh
bSogcHJvZ3JhbSwgY2xfa2VybmVsKiBrZXJuZWwsIGNvbnN0IGNoYXIqIGtlcm5lbG5hbWUpCisg
eworIAkqa2VybmVsID0gY2xDcmVhdGVLZXJuZWwoKnByb2dyYW0sIGtlcm5lbG5hbWUsICZlcnJv
cik7CisgCWlmKGVycm9yICE9IENMX1NVQ0NFU1MpIHtmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0
IGNsQ3JlYXRlS2VybmVsOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyB9CisgCisgdm9pZCBP
Q0xMYXllcjo6b3BlbmNsQ3JlYXRlQnVmZmVyKGNsX21lbSogYnVmLCBjb25zdCBjbF9tZW1fZmxh
Z3MgZmxhZ3MsIGNvbnN0IHNpemVfdCBzaXplKQorIHsKKyAJKmJ1ZiA9IGNsQ3JlYXRlQnVmZmVy
KGNvbnRleHQsIGZsYWdzLCBzaXplLCBOVUxMLCAmZXJyb3IpOworIAlpZihlcnJvciAhPSBDTF9T
VUNDRVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbENyZWF0ZUJ1ZmZlcjogIik7IG9w
ZW5jbFByaW50RXJyb3IoKTt9CisgfQorIAorIHZvaWQgT0NMTGF5ZXI6Om9wZW5jbFdyaXRlQnVm
ZmVyKGNsX21lbSogYnVmLCBjb25zdCBzaXplX3Qgb2Zmc2V0LCBjb25zdCBzaXplX3Qgc2l6ZSwg
Y29uc3Qgdm9pZCogc3JjLCBjb25zdCBib29sIHByb2ZpbGUpCisgeworIAljbF9ldmVudCBldmVu
dDsKKyAKKyAJZXJyb3IgPSBjbEVucXVldWVXcml0ZUJ1ZmZlcihjb21tYW5kX3F1ZXVlLCAqYnVm
LCBDTF9UUlVFLCBvZmZzZXQsIHNpemUsIHNyYywgMCwgTlVMTCwgJmV2ZW50KTsKKyAJaWYoZXJy
b3IgIT0gQ0xfU1VDQ0VTUykge2ZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xFbnF1ZXVlV3Jp
dGVCdWZmZXI6ICIpOyBvcGVuY2xQcmludEVycm9yKCk7fQorIC8vCWZwcmludGYoc3RkZXJyLCAi
SW4gb3BlbmNsV3JpdGVCdWZmZXJcbiIpOworIAlpZihwcm9maWxlKQorIAl7CisgCQljbF91bG9u
ZyBzdGFydCxlbmQ7CisgCQlsb25nIGludCBzZV90aW1pbmc7CisgCisgCQllcnJvciA9IGNsRmlu
aXNoKGNvbW1hbmRfcXVldWUpOworIAkJaWYoZXJyb3IgIT0gQ0xfU1VDQ0VTUykge2ZwcmludGYo
c3RkZXJyLCAiRXJyb3IgYXQgY2xGaW5pc2g6ICIpOyBvcGVuY2xQcmludEVycm9yKCk7fQorIAkJ
ZXJyb3IgPSBjbEdldEV2ZW50UHJvZmlsaW5nSW5mbyhldmVudCxDTF9QUk9GSUxJTkdfQ09NTUFO
RF9TVEFSVCw4LCh2b2lkKikmc3RhcnQsTlVMTCk7CisgCQlpZihlcnJvciAhPSBDTF9TVUNDRVNT
KSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbEdldEV2ZW50UHJvZmlsaW5nSW5mbzogIik7
IG9wZW5jbFByaW50RXJyb3IoKTt9CisgCQllcnJvciA9IGNsR2V0RXZlbnRQcm9maWxpbmdJbmZv
KGV2ZW50LENMX1BST0ZJTElOR19DT01NQU5EX0VORCw4LCh2b2lkKikmZW5kLE5VTEwpOworIAkJ
aWYoZXJyb3IgIT0gQ0xfU1VDQ0VTUykge2ZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xHZXRF
dmVudFByb2ZpbGluZ0luZm86ICIpOyBvcGVuY2xQcmludEVycm9yKCk7fQorIAkJc2VfdGltaW5n
ID0gZW5kLXN0YXJ0OworIAkJZnByaW50ZihzdGRlcnIsICJHUFUgdGltZSBmb3Igd3JpdGluZyBp
bnB1dDpcblx0ZW5kLXN0YXJ0PSVsZCBuc1xuIiwgc2VfdGltaW5nKTsKKyAJfQorIAorIAljbFJl
bGVhc2VFdmVudChldmVudCk7CisgfQorIAorIHZvaWQgT0NMTGF5ZXI6Om9wZW5jbFNldEtlcm5l
bEFyZyhjbF9rZXJuZWwqIGtlcm5lbCwgY29uc3QgdW5zaWduZWQgaW50IGFyZ19pZCwgY29uc3Qg
c2l6ZV90IHNpemUsIGNvbnN0IHZvaWQqIGFyZykKKyB7CisgCWVycm9yID0gY2xTZXRLZXJuZWxB
cmcoKmtlcm5lbCwgYXJnX2lkLCBzaXplLCBhcmcpOworIAlpZihlcnJvciAhPSBDTF9TVUNDRVNT
KSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbFNldEtlcm5lbEFyZzogIik7IG9wZW5jbFBy
aW50RXJyb3IoKTt9CisgfQorIAorIHZvaWQgT0NMTGF5ZXI6Om9wZW5jbFJ1bktlcm5lbChjbF9r
ZXJuZWwqIGtlcm5lbCwgY29uc3QgdW5zaWduZWQgaW50IGRpbSwgY29uc3Qgc2l6ZV90KiBvZmZz
ZXQsIGNvbnN0IHNpemVfdCogZ2xvYmFsX3NpemUsIGNvbnN0IHNpemVfdCogbG9jYWxfc2l6ZSwg
Y29uc3QgYm9vbCBwcm9maWxlKQorIHsKKyAJY2xfZXZlbnQgZXZlbnQ7CisgCisgLy8JZnByaW50
ZihzdGRlcnIsICJJbiAlc1xuIiwgX19mdW5jX18pOworIAllcnJvciA9IGNsRW5xdWV1ZU5EUmFu
Z2VLZXJuZWwoY29tbWFuZF9xdWV1ZSwgKmtlcm5lbCwgZGltLCBvZmZzZXQsIGdsb2JhbF9zaXpl
LCBsb2NhbF9zaXplLCAwLCBOVUxMLCAmZXZlbnQpOworIAlpZihlcnJvciAhPSBDTF9TVUNDRVNT
KSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbEVucXVldWVORFJhbmdlS2VybmVsOiAiKTsg
b3BlbmNsUHJpbnRFcnJvcigpO30KKyAJaWYocHJvZmlsZSkKKyAJeworIAkJY2xfdWxvbmcgc3Rh
cnQ9MCxlbmQ9MDsKKyAJCWxvbmcgdW5zaWduZWQgaW50IHNlX3RpbWluZzsKKyAJCWVycm9yID0g
Y2xGaW5pc2goY29tbWFuZF9xdWV1ZSk7CisgCQlpZihlcnJvciAhPSBDTF9TVUNDRVNTKSB7ZnBy
aW50ZihzdGRlcnIsICJFcnJvciBhdCBjbEZpbmlzaDogIik7IG9wZW5jbFByaW50RXJyb3IoKTt9
CisgCQllcnJvciA9IGNsR2V0RXZlbnRQcm9maWxpbmdJbmZvKGV2ZW50LENMX1BST0ZJTElOR19D
T01NQU5EX1NUQVJULDE2LCh2b2lkKikmc3RhcnQsTlVMTCk7CisgCQlpZihlcnJvciAhPSBDTF9T
VUNDRVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbEdldEV2ZW50UHJvZmlsaW5nSW5m
bzogIik7IG9wZW5jbFByaW50RXJyb3IoKTt9CisgCQllcnJvciA9IGNsR2V0RXZlbnRQcm9maWxp
bmdJbmZvKGV2ZW50LENMX1BST0ZJTElOR19DT01NQU5EX0VORCwxNiwodm9pZCopJmVuZCxOVUxM
KTsKKyAJCWlmKGVycm9yICE9IENMX1NVQ0NFU1MpIHtmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0
IGNsR2V0RXZlbnRQcm9maWxpbmdJbmZvOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyAJCXNl
X3RpbWluZyA9IGVuZC1zdGFydDsKKyAJCWZwcmludGYoc3RkZXJyLCAiR1BVIHRpbWUgZm9yIGtl
cm5lbCBleGVjdXRpb246XG5cdGVuZC1zdGFydD0lbHUgbnNcbiIsIHNlX3RpbWluZyk7CisgCX0K
KyAKKyAJY2xSZWxlYXNlRXZlbnQoZXZlbnQpOworIH0KKyAKKyB2b2lkIE9DTExheWVyOjpvcGVu
Y2xSdW5LZXJuZWxUYXNrKGNsX2tlcm5lbCoga2VybmVsLCBjb25zdCBib29sIHByb2ZpbGUpCisg
eworIAljbF9ldmVudCBldmVudDsKKyAvLwlmcHJpbnRmKHN0ZGVyciwgIkluICVzXG4iLCBfX2Z1
bmNfXyk7CisgCWVycm9yID0gY2xFbnF1ZXVlVGFzayhjb21tYW5kX3F1ZXVlLCAqa2VybmVsLCAw
LCBOVUxMLCAmZXZlbnQpOworIAlpZihlcnJvciAhPSBDTF9TVUNDRVNTKSB7ZnByaW50ZihzdGRl
cnIsICJFcnJvciBhdCBjbEVucXVldWVUYXNrOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyAJ
aWYocHJvZmlsZSkKKyAJeworIAkJY2xfdWxvbmcgc3RhcnQsZW5kOworIAkJbG9uZyBpbnQgc2Vf
dGltaW5nOworIAorIAkJZXJyb3IgPSBjbEZpbmlzaChjb21tYW5kX3F1ZXVlKTsKKyAJCWlmKGVy
cm9yICE9IENMX1NVQ0NFU1MpIHtmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsRmluaXNoOiAi
KTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyAJCWVycm9yID0gY2xHZXRFdmVudFByb2ZpbGluZ0lu
Zm8oZXZlbnQsQ0xfUFJPRklMSU5HX0NPTU1BTkRfU1RBUlQsOCwodm9pZCopJnN0YXJ0LE5VTEwp
OworIAkJaWYoZXJyb3IgIT0gQ0xfU1VDQ0VTUykge2ZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQg
Y2xHZXRFdmVudFByb2ZpbGluZ0luZm86ICIpOyBvcGVuY2xQcmludEVycm9yKCk7fQorIAkJZXJy
b3IgPSBjbEdldEV2ZW50UHJvZmlsaW5nSW5mbyhldmVudCxDTF9QUk9GSUxJTkdfQ09NTUFORF9F
TkQsOCwodm9pZCopJmVuZCxOVUxMKTsKKyAJCWlmKGVycm9yICE9IENMX1NVQ0NFU1MpIHtmcHJp
bnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsR2V0RXZlbnRQcm9maWxpbmdJbmZvOiAiKTsgb3BlbmNs
UHJpbnRFcnJvcigpO30KKyAJCXNlX3RpbWluZyA9IGVuZC1zdGFydDsKKyAJCWZwcmludGYoc3Rk
ZXJyLCAiR1BVIHRpbWUgZm9yIGtlcm5lbCBleGVjdXRpb246XG5cdGVuZC1zdGFydD0lbGQgbnNc
biIsIHNlX3RpbWluZyk7CisgCX0KKyAKKyAJY2xSZWxlYXNlRXZlbnQoZXZlbnQpOworIH0KKyAK
KyB2b2lkIE9DTExheWVyOjpvcGVuY2xSZWFkQnVmZmVyKGNsX21lbSogYnVmLCBjb25zdCBzaXpl
X3Qgb2Zmc2V0LCBjb25zdCBzaXplX3Qgc2l6ZSwgdm9pZCogZHN0LCBjb25zdCBib29sIHByb2Zp
bGUpCisgeworIAljbF9ldmVudCBldmVudDsKKyAKKyAJZXJyb3IgPSBjbEVucXVldWVSZWFkQnVm
ZmVyKGNvbW1hbmRfcXVldWUsICpidWYsIENMX1RSVUUsIG9mZnNldCwgc2l6ZSwgZHN0LCAwLCBO
VUxMLCAmZXZlbnQpOworIAlpZihlcnJvciAhPSBDTF9TVUNDRVNTKSB7ZnByaW50ZihzdGRlcnIs
ICJFcnJvciBhdCBjbEVucXVldWVSZWFkQnVmZmVyOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30K
KyAKKyAJaWYocHJvZmlsZSkKKyAJeworIAkJY2xfdWxvbmcgc3RhcnQsZW5kOworIAkJbG9uZyBp
bnQgc2VfdGltaW5nOworIAorIAkJZXJyb3IgPSBjbEZpbmlzaChjb21tYW5kX3F1ZXVlKTsKKyAJ
CWlmKGVycm9yICE9IENMX1NVQ0NFU1MpIHtmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsRmlu
aXNoOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyAJCWVycm9yID0gY2xHZXRFdmVudFByb2Zp
bGluZ0luZm8oZXZlbnQsQ0xfUFJPRklMSU5HX0NPTU1BTkRfU1RBUlQsOCwodm9pZCopJnN0YXJ0
LE5VTEwpOworIAkJaWYoZXJyb3IgIT0gQ0xfU1VDQ0VTUykge2ZwcmludGYoc3RkZXJyLCAiRXJy
b3IgYXQgY2xHZXRFdmVudFByb2ZpbGluZ0luZm86ICIpOyBvcGVuY2xQcmludEVycm9yKCk7fQor
IAkJZXJyb3IgPSBjbEdldEV2ZW50UHJvZmlsaW5nSW5mbyhldmVudCxDTF9QUk9GSUxJTkdfQ09N
TUFORF9FTkQsOCwodm9pZCopJmVuZCxOVUxMKTsKKyAJCWlmKGVycm9yICE9IENMX1NVQ0NFU1Mp
IHtmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsR2V0RXZlbnRQcm9maWxpbmdJbmZvOiAiKTsg
b3BlbmNsUHJpbnRFcnJvcigpO30KKyAJCXNlX3RpbWluZyA9IGVuZC1zdGFydDsKKyAJCWZwcmlu
dGYoc3RkZXJyLCAiR1BVIHRpbWUgZm9yIHJlYWRpbmcgb3V0cHV0OlxuXHRlbmQtc3RhcnQ9JWxk
IG5zXG4iLCBzZV90aW1pbmcpOworIAl9CisgCisgCWNsUmVsZWFzZUV2ZW50KGV2ZW50KTsKKyB9
CisgCisgdm9pZCBPQ0xMYXllcjo6b3BlbmNsQ2xlYW5VcEJ1ZmZlcihjbF9tZW0qIGJ1ZikKKyB7
CisgCWVycm9yID0gY2xSZWxlYXNlTWVtT2JqZWN0KCpidWYpOworIAlpZihlcnJvciAhPSBDTF9T
VUNDRVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbFJlbGVhc2VNZW1PYmplY3Q6ICIp
OyBvcGVuY2xQcmludEVycm9yKCk7fQorIH0KKyAKKyB2b2lkIE9DTExheWVyOjpvcGVuY2xDbGVh
blVwS2VybmVsKGNsX2tlcm5lbCoga2VybmVsKQorIHsKKyAJZXJyb3IgPSBjbFJlbGVhc2VLZXJu
ZWwoKmtlcm5lbCk7CisgCWlmKGVycm9yICE9IENMX1NVQ0NFU1MpIHtmcHJpbnRmKHN0ZGVyciwg
IkVycm9yIGF0IGNsUmVsZWFzZUtlcm5lbDogIik7IG9wZW5jbFByaW50RXJyb3IoKTt9CisgfQor
IAorIHZvaWQgT0NMTGF5ZXI6Om9wZW5jbENsZWFuVXBQcm9ncmFtKGNsX3Byb2dyYW0gKnByb2dy
YW0pCisgeworIAllcnJvciA9IGNsUmVsZWFzZVByb2dyYW0oKnByb2dyYW0pOworIAlpZihlcnJv
ciAhPSBDTF9TVUNDRVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbFJlbGVhc2VQcm9n
cmFtOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyB9CisgCisgdm9pZCBPQ0xMYXllcjo6b3Bl
bmNsQ2xlYW5VcENvbW1vbigpCisgeworIAllcnJvciA9IGNsUmVsZWFzZUNvbW1hbmRRdWV1ZShj
b21tYW5kX3F1ZXVlKTsKKyAJaWYoZXJyb3IgIT0gQ0xfU1VDQ0VTUykge2ZwcmludGYoc3RkZXJy
LCAiRXJyb3IgYXQgY2xSZWxlYXNlQ29tbWFuZFF1ZXVlOiAiKTsgb3BlbmNsUHJpbnRFcnJvcigp
O30KKyAJZXJyb3IgPSBjbFJlbGVhc2VDb250ZXh0KGNvbnRleHQpOworIAlpZihlcnJvciAhPSBD
TF9TVUNDRVNTKSB7ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbFJlbGVhc2VDb250ZXh0OiAi
KTsgb3BlbmNsUHJpbnRFcnJvcigpO30KKyB9CisgCisgdm9pZCBPQ0xMYXllcjo6b3BlbmNsUHJp
bnRFcnJvcigpCisgeworIAlzd2l0Y2goZXJyb3IpCisgCXsKKyAJY2FzZSBDTF9ERVZJQ0VfTk9U
X0ZPVU5EOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9ERVZJQ0VfTk9UX0ZPVU5EXG4iKTsKKyAJ
CWJyZWFrOworIAljYXNlIENMX0RFVklDRV9OT1RfQVZBSUxBQkxFOgorIAkJZnByaW50ZihzdGRl
cnIsICJDTF9ERVZJQ0VfTk9UX0FWQUlMQUJMRVxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9D
T01QSUxFUl9OT1RfQVZBSUxBQkxFOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9DT01QSUxFUl9O
T1RfQVZBSUxBQkxFXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX01FTV9PQkpFQ1RfQUxMT0NB
VElPTl9GQUlMVVJFOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9NRU1fT0JKRUNUX0FMTE9DQVRJ
T05fRkFJTFVSRVxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9PVVRfT0ZfUkVTT1VSQ0VTOgor
IAkJZnByaW50ZihzdGRlcnIsICJDTF9PVVRfT0ZfUkVTT1VSQ0VTXG4iKTsKKyAJCWJyZWFrOwor
IAljYXNlIENMX09VVF9PRl9IT1NUX01FTU9SWToKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfT1VU
X09GX0hPU1RfTUVNT1JZXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX1BST0ZJTElOR19JTkZP
X05PVF9BVkFJTEFCTEU6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX1BST0ZJTElOR19JTkZPX05P
VF9BVkFJTEFCTEVcbiIpOworIAkJYnJlYWs7CisgCWNhc2UgQ0xfTUVNX0NPUFlfT1ZFUkxBUDoK
KyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfTUVNX0NPUFlfT1ZFUkxBUFxuIik7CisgCQlicmVhazsK
KyAJY2FzZSBDTF9JTUFHRV9GT1JNQVRfTUlTTUFUQ0g6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNM
X0lNQUdFX0ZPUk1BVF9NSVNNQVRDSFxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTUFHRV9G
T1JNQVRfTk9UX1NVUFBPUlRFRDoKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfSU1BR0VfRk9STUFU
X05PVF9TVVBQT1JURURcbiIpOworIAkJYnJlYWs7CisgCWNhc2UgQ0xfQlVJTERfUFJPR1JBTV9G
QUlMVVJFOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9CVUlMRF9QUk9HUkFNX0ZBSUxVUkVcbiIp
OworIAkJYnJlYWs7CisgCWNhc2UgQ0xfTUFQX0ZBSUxVUkU6CisgCQlmcHJpbnRmKHN0ZGVyciwg
IkNMX01BUF9GQUlMVVJFXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lOVkFMSURfVkFMVUU6
CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfVkFMVUVcbiIpOworIAkJYnJlYWs7Cisg
CWNhc2UgQ0xfSU5WQUxJRF9ERVZJQ0VfVFlQRToKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfSU5W
QUxJRF9ERVZJQ0VfVFlQRVxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX1BMQVRG
T1JNOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1BMQVRGT1JNXG4iKTsKKyAJCWJy
ZWFrOworIAljYXNlIENMX0lOVkFMSURfREVWSUNFOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9J
TlZBTElEX0RFVklDRVxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0NPTlRFWFQ6
CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQ09OVEVYVFxuIik7CisgCQlicmVhazsK
KyAJY2FzZSBDTF9JTlZBTElEX1FVRVVFX1BST1BFUlRJRVM6CisgCQlmcHJpbnRmKHN0ZGVyciwg
IkNMX0lOVkFMSURfUVVFVUVfUFJPUEVSVElFU1xuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9J
TlZBTElEX0NPTU1BTkRfUVVFVUU6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQ09N
TUFORF9RVUVVRVxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0hPU1RfUFRSOgor
IAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0hPU1RfUFRSXG4iKTsKKyAJCWJyZWFrOwor
IAljYXNlIENMX0lOVkFMSURfTUVNX09CSkVDVDoKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfSU5W
QUxJRF9NRU1fT0JKRUNUXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lOVkFMSURfSU1BR0Vf
Rk9STUFUX0RFU0NSSVBUT1I6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfSU1BR0Vf
Rk9STUFUX0RFU0NSSVBUT1JcbiIpOworIAkJYnJlYWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9JTUFH
RV9TSVpFOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0lNQUdFX1NJWkVcbiIpOwor
IAkJYnJlYWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9TQU1QTEVSOgorIAkJZnByaW50ZihzdGRlcnIs
ICJDTF9JTlZBTElEX1NBTVBMRVJcbiIpOworIAkJYnJlYWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9C
SU5BUlk6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQklOQVJZXG4iKTsKKyAJCWJy
ZWFrOworIAljYXNlIENMX0lOVkFMSURfQlVJTERfT1BUSU9OUzoKKyAJCWZwcmludGYoc3RkZXJy
LCAiQ0xfSU5WQUxJRF9CVUlMRF9PUFRJT05TXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lO
VkFMSURfUFJPR1JBTToKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9QUk9HUkFNXG4i
KTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lOVkFMSURfUFJPR1JBTV9FWEVDVVRBQkxFOgorIAkJ
ZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1BST0dSQU1fRVhFQ1VUQUJMRVxuIik7CisgCQli
cmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0tFUk5FTF9OQU1FOgorIAkJZnByaW50ZihzdGRlcnIs
ICJDTF9JTlZBTElEX0tFUk5FTF9OQU1FXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lOVkFM
SURfS0VSTkVMX0RFRklOSVRJT046CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfS0VS
TkVMX0RFRklOSVRJT05cbiIpOworIAkJYnJlYWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9LRVJORUw6
CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfS0VSTkVMXG4iKTsKKyAJCWJyZWFrOwor
IAljYXNlIENMX0lOVkFMSURfQVJHX0lOREVYOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZB
TElEX0FSR19JTkRFWFxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0FSR19WQUxV
RToKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9BUkdfVkFMVUVcbiIpOworIAkJYnJl
YWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9BUkdfU0laRToKKyAJCWZwcmludGYoc3RkZXJyLCAiQ0xf
SU5WQUxJRF9BUkdfU0laRVxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0tFUk5F
TF9BUkdTOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0tFUk5FTF9BUkdTXG4iKTsK
KyAJCWJyZWFrOworIAljYXNlIENMX0lOVkFMSURfV09SS19ESU1FTlNJT046CisgCQlmcHJpbnRm
KHN0ZGVyciwgIkNMX0lOVkFMSURfV09SS19ESU1FTlNJT05cbiIpOworIAkJYnJlYWs7CisgCWNh
c2UgQ0xfSU5WQUxJRF9XT1JLX0dST1VQX1NJWkU6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lO
VkFMSURfV09SS19HUk9VUF9TSVpFXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lOVkFMSURf
V09SS19JVEVNX1NJWkU6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfV09SS19JVEVN
X1NJWkVcbiIpOworIAkJYnJlYWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9HTE9CQUxfT0ZGU0VUOgor
IAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0dMT0JBTF9PRkZTRVRcbiIpOworIAkJYnJl
YWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9FVkVOVF9XQUlUX0xJU1Q6CisgCQlmcHJpbnRmKHN0ZGVy
ciwgIkNMX0lOVkFMSURfRVZFTlRfV0FJVF9MSVNUXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENM
X0lOVkFMSURfRVZFTlQ6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfRVZFTlRcbiIp
OworIAkJYnJlYWs7CisgCWNhc2UgQ0xfSU5WQUxJRF9PUEVSQVRJT046CisgCQlmcHJpbnRmKHN0
ZGVyciwgIkNMX0lOVkFMSURfT1BFUkFUSU9OXG4iKTsKKyAJCWJyZWFrOworIAljYXNlIENMX0lO
VkFMSURfR0xfT0JKRUNUOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0dMX09CSkVD
VFxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0JVRkZFUl9TSVpFOgorIAkJZnBy
aW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0JVRkZFUl9TSVpFXG4iKTsKKyAJCWJyZWFrOworIAlj
YXNlIENMX0lOVkFMSURfTUlQX0xFVkVMOgorIAkJZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElE
X01JUF9MRVZFTFxuIik7CisgCQlicmVhazsKKyAJY2FzZSBDTF9JTlZBTElEX0dMT0JBTF9XT1JL
X1NJWkU6CisgCQlmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfR0xPQkFMX1dPUktfU0laRVxu
Iik7CisgCQlicmVhazsKKyAJZGVmYXVsdDoKKyAJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBl
cnJvciBjb2RlIDogJWRcbiIsIGVycm9yKTsKKyAJCWJyZWFrOworIAl9CisgCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKyB9CisgCisgdm9pZCBPQ0xMYXllcjo6b3BlbmNsUGxhdGZvcm1DYXBhYmlsaXRp
ZXNRdWVyeSgpIHsKKyAJY2xfcGxhdGZvcm1faWQgKnBsYXRmb3JtcyA9IChjbF9wbGF0Zm9ybV9p
ZCopIG1hbGxvYyhzaXplb2YgKGNsX3BsYXRmb3JtX2lkKSAqIE1BWF9QTEFURk9STVMpOworIAlj
bF91aW50IHJldHVybmVkX3BsYXRmb3JtczsKKyAJc2l6ZV90IGFycmF5X3NpemUgPSBNQVhfQVJS
QVlfU0laRTsKKyAJc2l6ZV90IHJldHVybmVkX3NpemU7CisgCWNsX2RldmljZV9pZCAqZGV2aWNl
cyA9IChjbF9kZXZpY2VfaWQqKSBtYWxsb2Moc2l6ZW9mKGNsX2RldmljZV9pZCkgKiBNQVhfREVW
SUNFUyk7CisgCWNsX3VpbnQgcmV0dXJuZWRfZGV2aWNlczsKKyAJY2hhciAqb3V0cHV0X2FycmF5
ID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiBhcnJheV9zaXplKTsKKyAJY2xfaW50IGxv
Y2FsX2Vycm9yID0gY2xHZXRQbGF0Zm9ybUlEcyhNQVhfUExBVEZPUk1TLCBwbGF0Zm9ybXMsICZy
ZXR1cm5lZF9wbGF0Zm9ybXMpOworIAorIAlpZihsb2NhbF9lcnJvciAhPSBDTF9TVUNDRVNTKSB7
ZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBjbEdldFBsYXRmb3JtSURzOiAiKTsgb3BlbmNsUHJp
bnRFcnJvcigpO30KKyAJZnByaW50ZihzdGRlcnIsICJyZXR1cm5lZF9wbGF0Zm9ybXMgPSAlaVxu
IiwgcmV0dXJuZWRfcGxhdGZvcm1zKTsKKyAJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGk8cmV0
dXJuZWRfcGxhdGZvcm1zOyBpKyspIHsKKyAJCWZwcmludGYoc3RkZXJyLCAicGxhdGZvcm0gJWkg
SUQgPSAlaVxuIiwgaSwgcGxhdGZvcm1zW2ldKTsKKyAJCWxvY2FsX2Vycm9yID0gY2xHZXRQbGF0
Zm9ybUluZm8ocGxhdGZvcm1zW2ldLCBDTF9QTEFURk9STV9QUk9GSUxFLCBhcnJheV9zaXplLCBv
dXRwdXRfYXJyYXksICZyZXR1cm5lZF9zaXplKTsKKyAJCWZwcmludGYoc3RkZXJyLCAiICBDTF9Q
TEFURk9STV9QUk9GSUxFICVzXG4iLCBvdXRwdXRfYXJyYXkpOworIAkJbG9jYWxfZXJyb3IgPSBj
bEdldFBsYXRmb3JtSW5mbyhwbGF0Zm9ybXNbaV0sIENMX1BMQVRGT1JNX1ZFUlNJT04sIGFycmF5
X3NpemUsIG91dHB1dF9hcnJheSwgJnJldHVybmVkX3NpemUpOworIAkJZnByaW50ZihzdGRlcnIs
ICIgIENMX1BMQVRGT1JNX1ZFUlNJT04gJXNcbiIsIG91dHB1dF9hcnJheSk7CisgCQlsb2NhbF9l
cnJvciA9IGNsR2V0UGxhdGZvcm1JbmZvKHBsYXRmb3Jtc1tpXSwgQ0xfUExBVEZPUk1fTkFNRSwg
YXJyYXlfc2l6ZSwgb3V0cHV0X2FycmF5LCAmcmV0dXJuZWRfc2l6ZSk7CisgCQlmcHJpbnRmKHN0
ZGVyciwgIiAgQ0xfUExBVEZPUk1fTkFNRSAlc1xuIiwgb3V0cHV0X2FycmF5KTsKKyAJCWxvY2Fs
X2Vycm9yID0gY2xHZXRQbGF0Zm9ybUluZm8ocGxhdGZvcm1zW2ldLCBDTF9QTEFURk9STV9WRU5E
T1IsIGFycmF5X3NpemUsIG91dHB1dF9hcnJheSwgJnJldHVybmVkX3NpemUpOworIAkJZnByaW50
ZihzdGRlcnIsICIgIENMX1BMQVRGT1JNX1ZFTkRPUiAlc1xuIiwgb3V0cHV0X2FycmF5KTsKKyAJ
CWxvY2FsX2Vycm9yID0gY2xHZXRQbGF0Zm9ybUluZm8ocGxhdGZvcm1zW2ldLCBDTF9QTEFURk9S
TV9FWFRFTlNJT05TLCBhcnJheV9zaXplLCBvdXRwdXRfYXJyYXksICZyZXR1cm5lZF9zaXplKTsK
KyAJCWZwcmludGYoc3RkZXJyLCAiICBDTF9QTEFURk9STV9FWFRFTlNJT05TICVzXG4iLCBvdXRw
dXRfYXJyYXkpOworIC8vIyMjIyMjIyMjIyMjIyMgRGV2aWNlcyBzZWN0aW9uICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCisgCQljbEdldERldmljZUlEcyhwbGF0Zm9ybXNbaV0sIENMX0RFVklDRV9U
WVBFX0RFRkFVTFQsIE1BWF9ERVZJQ0VTLCBkZXZpY2VzLCAmcmV0dXJuZWRfZGV2aWNlcyk7Cisg
CQlmcHJpbnRmKHN0ZGVyciwgIiAgICBkZXZpY2VzIENMX0RFVklDRV9UWVBFX0RFRkFVTFQgJWlc
biIsIHJldHVybmVkX2RldmljZXMpOworIAkJY2xHZXREZXZpY2VJRHMocGxhdGZvcm1zW2ldLCBD
TF9ERVZJQ0VfVFlQRV9DUFUsIE1BWF9ERVZJQ0VTLCBkZXZpY2VzLCAmcmV0dXJuZWRfZGV2aWNl
cyk7CisgCQlmcHJpbnRmKHN0ZGVyciwgIiAgICBkZXZpY2VzIENMX0RFVklDRV9UWVBFX0NQVSAl
aVxuIiwgcmV0dXJuZWRfZGV2aWNlcyk7CisgCQljbEdldERldmljZUlEcyhwbGF0Zm9ybXNbaV0s
IENMX0RFVklDRV9UWVBFX0dQVSwgTUFYX0RFVklDRVMsIGRldmljZXMsICZyZXR1cm5lZF9kZXZp
Y2VzKTsKKyAJCWZwcmludGYoc3RkZXJyLCAiICAgIGRldmljZXMgQ0xfREVWSUNFX1RZUEVfR1BV
ICVpXG4iLCByZXR1cm5lZF9kZXZpY2VzKTsKKyAJCWNsR2V0RGV2aWNlSURzKHBsYXRmb3Jtc1tp
XSwgQ0xfREVWSUNFX1RZUEVfQUNDRUxFUkFUT1IsIE1BWF9ERVZJQ0VTLCBkZXZpY2VzLCAmcmV0
dXJuZWRfZGV2aWNlcyk7CisgCQlmcHJpbnRmKHN0ZGVyciwgIiAgICBkZXZpY2VzIENMX0RFVklD
RV9UWVBFX0FDQ0VMRVJBVE9SICVpXG4iLCByZXR1cm5lZF9kZXZpY2VzKTsKKyAJCWNsR2V0RGV2
aWNlSURzKHBsYXRmb3Jtc1tpXSwgQ0xfREVWSUNFX1RZUEVfQUxMLCBNQVhfREVWSUNFUywgZGV2
aWNlcywgJnJldHVybmVkX2RldmljZXMpOworIAkJZnByaW50ZihzdGRlcnIsICIgICAgZGV2aWNl
cyBDTF9ERVZJQ0VfVFlQRV9BTEwgJWlcbiIsIHJldHVybmVkX2RldmljZXMpOworIAkJZm9yICh1
bnNpZ25lZCBpbnQgaiA9IDA7IGo8IHJldHVybmVkX2RldmljZXM7IGorKykgeworIAkJCWZwcmlu
dGYoc3RkZXJyLCAiICAgIGZvciBkZXZpY2UgJWlcbiIsIGopOworIAkJCWNsX2RldmljZV90eXBl
IHJldF9kZXZfdHlwZTsKKyAJCQljbF91aW50IHJldF92YWx1ZTsKKyAJCQljbF91bG9uZyBsb25n
X3JldF92YWx1ZTsKKyAJCQljbF9ib29sIGZsYWc7CisgCQkJc2l6ZV90ICp2ZWN0b3Jfc2l6ZTsK
KyAJCQlzaXplX3Qgc2luZ2xlX3NpemU7CisgCQkJY2xfZGV2aWNlX2ZwX2NvbmZpZyBmcF9jb25m
aWc7CisgCQkJY2xfZGV2aWNlX21lbV9jYWNoZV90eXBlIG1lbV9jYWNoZV90eXBlOworIAkJCWNs
X2RldmljZV9sb2NhbF9tZW1fdHlwZSBtZW1fdHlwZTsKKyAJCQljbF9kZXZpY2VfZXhlY19jYXBh
YmlsaXRpZXMgZXhlY19jYWJhYmlsaXRpZXM7CisgCQkJY2xfY29tbWFuZF9xdWV1ZV9wcm9wZXJ0
aWVzIGNvbW1fcXVldWVfcHJvcDsKKyAJCQljbF9wbGF0Zm9ybV9pZCBwbGF0Zm9ybV9pZDsKKyAJ
CQkKKyAJCQl2ZWN0b3Jfc2l6ZSA9IChzaXplX3QqKW1hbGxvYyhzaXplb2Yoc2l6ZV90KSAqIE1B
WF9BUlJBWV9TSVpFKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfVFlQ
RSwgYXJyYXlfc2l6ZSwgJnJldF9kZXZfdHlwZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmlu
dGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX1RZUEUiKTsKKyAJCQlpZiAocmV0X2Rldl90eXBl
ICYgQ0xfREVWSUNFX1RZUEVfREVGQVVMVCkge2ZwcmludGYoc3RkZXJyLCAiIENMX0RFVklDRV9U
WVBFX0RFRkFVTFQiKTt9CisgCQkJaWYgKHJldF9kZXZfdHlwZSAmIENMX0RFVklDRV9UWVBFX0NQ
VSkge2ZwcmludGYoc3RkZXJyLCAiIENMX0RFVklDRV9UWVBFX0NQVSIpO30KKyAJCQlpZiAocmV0
X2Rldl90eXBlICYgQ0xfREVWSUNFX1RZUEVfR1BVKSB7ZnByaW50ZihzdGRlcnIsICIgQ0xfREVW
SUNFX1RZUEVfR1BVIik7fQorIAkJCWlmIChyZXRfZGV2X3R5cGUgJiBDTF9ERVZJQ0VfVFlQRV9B
Q0NFTEVSQVRPUikge2ZwcmludGYoc3RkZXJyLCAiIENMX0RFVklDRV9UWVBFX0FDQ0VMRVJBVE9S
Iik7fQorIAkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2
aWNlLCBDTF9ERVZJQ0VfVkVORE9SX0lELCBhcnJheV9zaXplLCAmcmV0X3ZhbHVlLCAmcmV0dXJu
ZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfVkVORE9SX0lE
ICV1XG4iLCByZXRfdmFsdWUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklD
RV9NQVhfQ09NUFVURV9VTklUUywgYXJyYXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3Np
emUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX01BWF9DT01QVVRFX1VO
SVRTICV1XG4iLCByZXRfdmFsdWUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RF
VklDRV9NQVhfV09SS19JVEVNX0RJTUVOU0lPTlMsIGFycmF5X3NpemUsICZyZXRfdmFsdWUsICZy
ZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9NQVhf
V09SS19JVEVNX0RJTUVOU0lPTlMgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJ
bmZvKGRldmljZSwgQ0xfREVWSUNFX01BWF9XT1JLX0dST1VQX1NJWkUsIGFycmF5X3NpemUsICZz
aW5nbGVfc2l6ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAg
Q0xfREVWSUNFX01BWF9XT1JLX0dST1VQX1NJWkUgJWx1XG4iLCBzaW5nbGVfc2l6ZSk7CisgCQkJ
Y2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX01BWF9XT1JLX0lURU1fU0laRVMsIGFy
cmF5X3NpemUsIHZlY3Rvcl9zaXplLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZm9yICh1bnNpZ25l
ZCBsb25nIGsgPSAwOyBrPHJldF92YWx1ZTsgaysrKSB7CisgCQkJCWZwcmludGYoc3RkZXJyLCAi
ICAgICAgQ0xfREVWSUNFX01BWF9XT1JLX0lURU1fU0laRVMgJWx1IGlzICVsdVxuIiwgaywgdmVj
dG9yX3NpemVba10pOworIAkJCX0KKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJ
Q0VfUFJFRkVSUkVEX1ZFQ1RPUl9XSURUSF9DSEFSLCBhcnJheV9zaXplLCAmcmV0X3ZhbHVlLCAm
cmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfUFJF
RkVSUkVEX1ZFQ1RPUl9XSURUSF9DSEFSICV1XG4iLCByZXRfdmFsdWUpOworIAkJCWNsR2V0RGV2
aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9QUkVGRVJSRURfVkVDVE9SX1dJRFRIX1NIT1JULCBh
cnJheV9zaXplLCAmcmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRl
cnIsICIgICAgICBDTF9ERVZJQ0VfUFJFRkVSUkVEX1ZFQ1RPUl9XSURUSF9TSE9SVCAldVxuIiwg
cmV0X3ZhbHVlKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfUFJFRkVS
UkVEX1ZFQ1RPUl9XSURUSF9JTlQsIGFycmF5X3NpemUsICZyZXRfdmFsdWUsICZyZXR1cm5lZF9z
aXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9QUkVGRVJSRURfVkVD
VE9SX1dJRFRIX0lOVCAldVxuIiwgcmV0X3ZhbHVlKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2
aWNlLCBDTF9ERVZJQ0VfUFJFRkVSUkVEX1ZFQ1RPUl9XSURUSF9MT05HLCBhcnJheV9zaXplLCAm
cmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBD
TF9ERVZJQ0VfUFJFRkVSUkVEX1ZFQ1RPUl9XSURUSF9MT05HICV1XG4iLCByZXRfdmFsdWUpOwor
IAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9QUkVGRVJSRURfVkVDVE9SX1dJ
RFRIX0ZMT0FULCBhcnJheV9zaXplLCAmcmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJ
ZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfUFJFRkVSUkVEX1ZFQ1RPUl9XSURUSF9G
TE9BVCAldVxuIiwgcmV0X3ZhbHVlKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9E
RVZJQ0VfUFJFRkVSUkVEX1ZFQ1RPUl9XSURUSF9ET1VCTEUsIGFycmF5X3NpemUsICZyZXRfdmFs
dWUsICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklD
RV9QUkVGRVJSRURfVkVDVE9SX1dJRFRIX0RPVUJMRSAldVxuIiwgcmV0X3ZhbHVlKTsKKyAJCQlj
bEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfTUFYX0NMT0NLX0ZSRVFVRU5DWSwgYXJy
YXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJy
LCAiICAgICAgQ0xfREVWSUNFX01BWF9DTE9DS19GUkVRVUVOQ1kgJXVcbiIsIHJldF92YWx1ZSk7
CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX0FERFJFU1NfQklUUywgYXJy
YXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJy
LCAiICAgICAgQ0xfREVWSUNFX0FERFJFU1NfQklUUyAldVxuIiwgcmV0X3ZhbHVlKTsKKyAJCQlj
bEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfTUFYX1JFQURfSU1BR0VfQVJHUywgYXJy
YXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJy
LCAiICAgICAgQ0xfREVWSUNFX01BWF9SRUFEX0lNQUdFX0FSR1MgJXVcbiIsIHJldF92YWx1ZSk7
CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX01BWF9XUklURV9JTUFHRV9B
UkdTLCBhcnJheV9zaXplLCAmcmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50
ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfTUFYX1dSSVRFX0lNQUdFX0FSR1MgJXVcbiIsIHJl
dF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX01BWF9NRU1f
QUxMT0NfU0laRSwgYXJyYXlfc2l6ZSwgJmxvbmdfcmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7
CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfTUFYX01FTV9BTExPQ19TSVpF
ICVsdVxuIiwgbG9uZ19yZXRfdmFsdWUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENM
X0RFVklDRV9JTUFHRTJEX01BWF9XSURUSCwgYXJyYXlfc2l6ZSwgJnNpbmdsZV9zaXplLCAmcmV0
dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfSU1BR0Uy
RF9NQVhfV0lEVEggJWx1XG4iLCBzaW5nbGVfc2l6ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRl
dmljZSwgQ0xfREVWSUNFX0lNQUdFMkRfTUFYX0hFSUdIVCwgYXJyYXlfc2l6ZSwgJnNpbmdsZV9z
aXplLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJ
Q0VfSU1BR0UyRF9NQVhfSEVJR0hUICVsdVxuIiwgc2luZ2xlX3NpemUpOworIAkJCWNsR2V0RGV2
aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9JTUFHRTNEX01BWF9XSURUSCwgYXJyYXlfc2l6ZSwg
JnNpbmdsZV9zaXplLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAg
ICBDTF9ERVZJQ0VfSU1BR0UzRF9NQVhfV0lEVEggJWx1XG4iLCBzaW5nbGVfc2l6ZSk7CisgCQkJ
Y2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX0lNQUdFM0RfTUFYX0hFSUdIVCwgYXJy
YXlfc2l6ZSwgJnNpbmdsZV9zaXplLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRl
cnIsICIgICAgICBDTF9ERVZJQ0VfSU1BR0UzRF9NQVhfSEVJR0hUICVsdVxuIiwgc2luZ2xlX3Np
emUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9JTUFHRTNEX01BWF9E
RVBUSCwgYXJyYXlfc2l6ZSwgJnNpbmdsZV9zaXplLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnBy
aW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfSU1BR0UzRF9NQVhfREVQVEggJWx1XG4iLCBz
aW5nbGVfc2l6ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX0lNQUdF
X1NVUFBPUlQsIGFycmF5X3NpemUsICZmbGFnLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJaWYgKGZs
YWcgPT0gQ0xfVFJVRSkge2ZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX0lNQUdFX1NV
UFBPUlQgVFJVRVxuIik7fQorIAkJCWVsc2Uge2ZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVW
SUNFX0lNQUdFX1NVUFBPUlQgRkFMU0VcbiIpO30KKyAJCQljbEdldERldmljZUluZm8oZGV2aWNl
LCBDTF9ERVZJQ0VfTUFYX1BBUkFNRVRFUl9TSVpFLCBhcnJheV9zaXplLCAmc2luZ2xlX3NpemUs
ICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9N
QVhfUEFSQU1FVEVSX1NJWkUgJWx1XG4iLCBzaW5nbGVfc2l6ZSk7CisgCQkJY2xHZXREZXZpY2VJ
bmZvKGRldmljZSwgQ0xfREVWSUNFX01BWF9TQU1QTEVSUywgYXJyYXlfc2l6ZSwgJnJldF92YWx1
ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNF
X01BWF9TQU1QTEVSUyAldVxuIiwgcmV0X3ZhbHVlKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2
aWNlLCBDTF9ERVZJQ0VfTUVNX0JBU0VfQUREUl9BTElHTiwgYXJyYXlfc2l6ZSwgJnJldF92YWx1
ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNF
X01FTV9CQVNFX0FERFJfQUxJR04gJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJ
bmZvKGRldmljZSwgQ0xfREVWSUNFX01JTl9EQVRBX1RZUEVfQUxJR05fU0laRSwgYXJyYXlfc2l6
ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAg
ICAgQ0xfREVWSUNFX01JTl9EQVRBX1RZUEVfQUxJR05fU0laRSAldVxuIiwgcmV0X3ZhbHVlKTsK
KyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfU0lOR0xFX0ZQX0NPTkZJRywg
YXJyYXlfc2l6ZSwgJmZwX2NvbmZpZywgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3Rk
ZXJyLCAiICAgICAgQ0xfREVWSUNFX1NJTkdMRV9GUF9DT05GSUciKTsKKyAJCQlpZiAoZnBfY29u
ZmlnICYgQ0xfRlBfREVOT1JNKSB7ZnByaW50ZihzdGRlcnIsICIgQ0xfRlBfREVOT1JNIik7fQor
IAkJCWlmIChmcF9jb25maWcgJiBDTF9GUF9JTkZfTkFOKSB7ZnByaW50ZihzdGRlcnIsICIgQ0xf
RlBfSU5GX05BTiIpO30KKyAJCQlpZiAoZnBfY29uZmlnICYgQ0xfRlBfUk9VTkRfVE9fTkVBUkVT
VCkge2ZwcmludGYoc3RkZXJyLCAiIENMX0ZQX1JPVU5EX1RPX05FQVJFU1QiKTt9CisgCQkJaWYg
KGZwX2NvbmZpZyAmIENMX0ZQX1JPVU5EX1RPX1pFUk8pIHtmcHJpbnRmKHN0ZGVyciwgIiBDTF9G
UF9ST1VORF9UT19aRVJPIik7fQorIAkJCWlmIChmcF9jb25maWcgJiBDTF9GUF9ST1VORF9UT19J
TkYpIHtmcHJpbnRmKHN0ZGVyciwgIiBDTF9GUF9ST1VORF9UT19JTkYiKTt9CisgCQkJaWYgKGZw
X2NvbmZpZyAmIENMX0ZQX0ZNQSkge2ZwcmludGYoc3RkZXJyLCAiIENMX0ZQX0ZNQSIpO30KKyAj
aWZuZGVmIFBBTkRBX0JPQVJECisgCQkJaWYgKGZwX2NvbmZpZyAmIENMX0ZQX1NPRlRfRkxPQVQp
IHtmcHJpbnRmKHN0ZGVyciwgIiBDTF9GUF9TT0ZUX0ZMT0FUIik7fQorICNlbmRpZgorIAkJCWZw
cmludGYoc3RkZXJyLCAiXG4iKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJ
Q0VfR0xPQkFMX01FTV9DQUNIRV9UWVBFLCBhcnJheV9zaXplLCAmbWVtX2NhY2hlX3R5cGUsICZy
ZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9HTE9C
QUxfTUVNX0NBQ0hFX1RZUEUiKTsKKyAJCQlpZiAobWVtX2NhY2hlX3R5cGUgPT0gQ0xfTk9ORSkg
e2ZwcmludGYoc3RkZXJyLCAiIENMX05PTkUiKTt9CisgCQkJZWxzZSBpZiAobWVtX2NhY2hlX3R5
cGUgPT0gQ0xfUkVBRF9PTkxZX0NBQ0hFKSB7ZnByaW50ZihzdGRlcnIsICIgQ0xfUkVBRF9PTkxZ
X0NBQ0hFIik7fQorIAkJCWVsc2UgaWYgKG1lbV9jYWNoZV90eXBlID09IENMX1JFQURfV1JJVEVf
Q0FDSEUpIHtmcHJpbnRmKHN0ZGVyciwgIiBDTF9SRUFEX1dSSVRFX0NBQ0hFIik7fQorIAkJCWZw
cmludGYoc3RkZXJyLCAiXG4iKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJ
Q0VfR0xPQkFMX01FTV9DQUNIRUxJTkVfU0laRSwgYXJyYXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJl
dHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX0dMT0JB
TF9NRU1fQ0FDSEVMSU5FX1NJWkUgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJ
bmZvKGRldmljZSwgQ0xfREVWSUNFX0dMT0JBTF9NRU1fQ0FDSEVfU0laRSwgYXJyYXlfc2l6ZSwg
JmxvbmdfcmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIg
ICAgICBDTF9ERVZJQ0VfR0xPQkFMX01FTV9DQUNIRV9TSVpFICVsdVxuIiwgbG9uZ19yZXRfdmFs
dWUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9HTE9CQUxfTUVNX1NJ
WkUsIGFycmF5X3NpemUsICZsb25nX3JldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZw
cmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX0dMT0JBTF9NRU1fU0laRSAlbHVcbiIsIGxv
bmdfcmV0X3ZhbHVlKTsKKyAJCQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfTUFY
X0NPTlNUQU5UX0JVRkZFUl9TSVpFLCBhcnJheV9zaXplLCAmbG9uZ19yZXRfdmFsdWUsICZyZXR1
cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9NQVhfQ09O
U1RBTlRfQlVGRkVSX1NJWkUgJWx1XG4iLCBsb25nX3JldF92YWx1ZSk7CisgCQkJY2xHZXREZXZp
Y2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX01BWF9DT05TVEFOVF9BUkdTLCBhcnJheV9zaXplLCAm
cmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRlcnIsICIgICAgICBD
TF9ERVZJQ0VfTUFYX0NPTlNUQU5UX0FSR1MgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXRE
ZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX0xPQ0FMX01FTV9UWVBFLCBhcnJheV9zaXplLCAm
bWVtX3R5cGUsICZyZXR1cm5lZF9zaXplKTsKKyAJCQlpZiAobWVtX3R5cGUgPT0gQ0xfTE9DQUwp
IHtmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9MT0NBTF9NRU1fVFlQRSBDTF9MT0NB
TFxuIik7fQorIAkJCWVsc2UgaWYgKG1lbV90eXBlID09IENMX0dMT0JBTCkge2ZwcmludGYoc3Rk
ZXJyLCAiICAgICAgQ0xfREVWSUNFX0xPQ0FMX01FTV9UWVBFIENMX0dMT0JBTFxuIik7fQorIAkJ
CWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9MT0NBTF9NRU1fU0laRSwgYXJyYXlf
c2l6ZSwgJmxvbmdfcmV0X3ZhbHVlLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50ZihzdGRl
cnIsICIgICAgICBDTF9ERVZJQ0VfTE9DQUxfTUVNX1NJWkUgJWx1XG4iLCBsb25nX3JldF92YWx1
ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX0VSUk9SX0NPUlJFQ1RJ
T05fU1VQUE9SVCwgYXJyYXlfc2l6ZSwgJmZsYWcsICZyZXR1cm5lZF9zaXplKTsKKyAJCQlpZiAo
ZmxhZyA9PSBDTF9UUlVFKSB7ZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfRVJST1Jf
Q09SUkVDVElPTl9TVVBQT1JUIFRSVUVcbiIpO30KKyAJCQllbHNlIHtmcHJpbnRmKHN0ZGVyciwg
IiAgICAgIENMX0RFVklDRV9FUlJPUl9DT1JSRUNUSU9OX1NVUFBPUlQgRkFMU0VcbiIpO30KKyAJ
CQljbEdldERldmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfUFJPRklMSU5HX1RJTUVSX1JFU09M
VVRJT04sIGFycmF5X3NpemUsICZzaW5nbGVfc2l6ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZw
cmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX1BST0ZJTElOR19USU1FUl9SRVNPTFVUSU9O
ICVsdVxuIiwgc2luZ2xlX3NpemUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RF
VklDRV9FTkRJQU5fTElUVExFLCBhcnJheV9zaXplLCAmZmxhZywgJnJldHVybmVkX3NpemUpOwor
IAkJCWlmIChmbGFnID09IENMX1RSVUUpIHtmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklD
RV9FTkRJQU5fTElUVExFIFRSVUVcbiIpO30KKyAJCQllbHNlIHtmcHJpbnRmKHN0ZGVyciwgIiAg
ICAgIENMX0RFVklDRV9FTkRJQU5fTElUVExFIEZBTFNFXG4iKTt9CisgCQkJY2xHZXREZXZpY2VJ
bmZvKGRldmljZSwgQ0xfREVWSUNFX0FWQUlMQUJMRSwgYXJyYXlfc2l6ZSwgJmZsYWcsICZyZXR1
cm5lZF9zaXplKTsKKyAJCQlpZiAoZmxhZyA9PSBDTF9UUlVFKSB7ZnByaW50ZihzdGRlcnIsICIg
ICAgICBDTF9ERVZJQ0VfQVZBSUxBQkxFIFRSVUVcbiIpO30KKyAJCQllbHNlIHtmcHJpbnRmKHN0
ZGVyciwgIiAgICAgIENMX0RFVklDRV9BVkFJTEFCTEUgRkFMU0VcbiIpO30KKyAJCQljbEdldERl
dmljZUluZm8oZGV2aWNlLCBDTF9ERVZJQ0VfQ09NUElMRVJfQVZBSUxBQkxFLCBhcnJheV9zaXpl
LCAmZmxhZywgJnJldHVybmVkX3NpemUpOworIAkJCWlmIChmbGFnID09IENMX1RSVUUpIHtmcHJp
bnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9DT01QSUxFUl9BVkFJTEFCTEUgVFJVRVxuIik7
fQorIAkJCWVsc2Uge2ZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX0NPTVBJTEVSX0FW
QUlMQUJMRSBGQUxTRVxuIik7fQorIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklD
RV9FWEVDVVRJT05fQ0FQQUJJTElUSUVTLCBhcnJheV9zaXplLCAmZXhlY19jYWJhYmlsaXRpZXMs
ICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9F
WEVDVVRJT05fQ0FQQUJJTElUSUVTIik7CisgCQkJaWYgKGV4ZWNfY2FiYWJpbGl0aWVzICYgQ0xf
RVhFQ19LRVJORUwpIHtmcHJpbnRmKHN0ZGVyciwgIiBDTF9FWEVDX0tFUk5FTCIpO30KKyAJCQlp
ZiAoZXhlY19jYWJhYmlsaXRpZXMgJiBDTF9FWEVDX05BVElWRV9LRVJORUwpIHtmcHJpbnRmKHN0
ZGVyciwgIiBDTF9FWEVDX05BVElWRV9LRVJORUwiKTt9CisgCQkJZnByaW50ZihzdGRlcnIsICJc
biIpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9RVUVVRV9QUk9QRVJU
SUVTLCBhcnJheV9zaXplLCAmY29tbV9xdWV1ZV9wcm9wLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJ
ZnByaW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfUVVFVUVfUFJPUEVSVElFUyIpOworIAkJ
CWlmIChjb21tX3F1ZXVlX3Byb3AgJiBDTF9RVUVVRV9PVVRfT0ZfT1JERVJfRVhFQ19NT0RFX0VO
QUJMRSkge2ZwcmludGYoc3RkZXJyLCAiIENMX1FVRVVFX09VVF9PRl9PUkRFUl9FWEVDX01PREVf
RU5BQkxFIik7fQorIAkJCWlmIChjb21tX3F1ZXVlX3Byb3AgJiBDTF9RVUVVRV9QUk9GSUxJTkdf
RU5BQkxFKSB7ZnByaW50ZihzdGRlcnIsICIgQ0xfUVVFVUVfUFJPRklMSU5HX0VOQUJMRSIpO30K
KyAJCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwg
Q0xfREVWSUNFX05BTUUsIGFycmF5X3NpemUsIG91dHB1dF9hcnJheSwgJnJldHVybmVkX3NpemUp
OworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX05BTUUgJXNcbiIsIG91dHB1
dF9hcnJheSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX1ZFTkRPUiwg
YXJyYXlfc2l6ZSwgb3V0cHV0X2FycmF5LCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50Zihz
dGRlcnIsICIgICAgICBDTF9ERVZJQ0VfVkVORE9SICVzXG4iLCBvdXRwdXRfYXJyYXkpOworIAkJ
CWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RSSVZFUl9WRVJTSU9OLCBhcnJheV9zaXplLCBv
dXRwdXRfYXJyYXksICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAg
IENMX0RSSVZFUl9WRVJTSU9OICVzXG4iLCBvdXRwdXRfYXJyYXkpOworIAkJCWNsR2V0RGV2aWNl
SW5mbyhkZXZpY2UsIENMX0RFVklDRV9QUk9GSUxFLCBhcnJheV9zaXplLCBvdXRwdXRfYXJyYXks
ICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9Q
Uk9GSUxFICVzXG4iLCBvdXRwdXRfYXJyYXkpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2Us
IENMX0RFVklDRV9WRVJTSU9OLCBhcnJheV9zaXplLCBvdXRwdXRfYXJyYXksICZyZXR1cm5lZF9z
aXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9WRVJTSU9OICVzXG4i
LCBvdXRwdXRfYXJyYXkpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9F
WFRFTlNJT05TLCBhcnJheV9zaXplLCBvdXRwdXRfYXJyYXksICZyZXR1cm5lZF9zaXplKTsKKyAJ
CQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9FWFRFTlNJT05TICVzXG4iLCBvdXRw
dXRfYXJyYXkpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9QTEFURk9S
TSwgYXJyYXlfc2l6ZSwgJnBsYXRmb3JtX2lkLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJZnByaW50
ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfUExBVEZPUk0gJWx1XG4iLCBwbGF0Zm9ybV9pZCk7
CisgI2lmbmRlZiBQQU5EQV9CT0FSRAorIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RF
VklDRV9QUkVGRVJSRURfVkVDVE9SX1dJRFRIX0hBTEYsIGFycmF5X3NpemUsICZyZXRfdmFsdWUs
ICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9Q
UkVGRVJSRURfVkVDVE9SX1dJRFRIX0hBTEYgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXRE
ZXZpY2VJbmZvKGRldmljZSwgQ0xfREVWSUNFX0hPU1RfVU5JRklFRF9NRU1PUlksIGFycmF5X3Np
emUsICZmbGFnLCAmcmV0dXJuZWRfc2l6ZSk7CisgCQkJaWYgKGZsYWcgPT0gQ0xfVFJVRSkgZnBy
aW50ZihzdGRlcnIsICIgICAgICBDTF9ERVZJQ0VfSE9TVF9VTklGSUVEX01FTU9SWSBUUlVFXG4i
KTsKKyAJCQllbHNlIGZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX0hPU1RfVU5JRklF
RF9NRU1PUlkgRkFMU0VcbiIpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklD
RV9OQVRJVkVfVkVDVE9SX1dJRFRIX0NIQVIsIGFycmF5X3NpemUsICZyZXRfdmFsdWUsICZyZXR1
cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9OQVRJVkVf
VkVDVE9SX1dJRFRIX0NIQVIgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZv
KGRldmljZSwgQ0xfREVWSUNFX05BVElWRV9WRUNUT1JfV0lEVEhfU0hPUlQsIGFycmF5X3NpemUs
ICZyZXRfdmFsdWUsICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAg
IENMX0RFVklDRV9OQVRJVkVfVkVDVE9SX1dJRFRIX1NIT1JUICV1XG4iLCByZXRfdmFsdWUpOwor
IAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9OQVRJVkVfVkVDVE9SX1dJRFRI
X0lOVCwgYXJyYXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmlu
dGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX05BVElWRV9WRUNUT1JfV0lEVEhfSU5UICV1XG4i
LCByZXRfdmFsdWUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9OQVRJ
VkVfVkVDVE9SX1dJRFRIX0xPTkcsIGFycmF5X3NpemUsICZyZXRfdmFsdWUsICZyZXR1cm5lZF9z
aXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9OQVRJVkVfVkVDVE9S
X1dJRFRIX0xPTkcgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmlj
ZSwgQ0xfREVWSUNFX05BVElWRV9WRUNUT1JfV0lEVEhfRkxPQVQsIGFycmF5X3NpemUsICZyZXRf
dmFsdWUsICZyZXR1cm5lZF9zaXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RF
VklDRV9OQVRJVkVfVkVDVE9SX1dJRFRIX0ZMT0FUICV1XG4iLCByZXRfdmFsdWUpOworIAkJCWNs
R2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9OQVRJVkVfVkVDVE9SX1dJRFRIX0RPVUJM
RSwgYXJyYXlfc2l6ZSwgJnJldF92YWx1ZSwgJnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYo
c3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX05BVElWRV9WRUNUT1JfV0lEVEhfRE9VQkxFICV1XG4i
LCByZXRfdmFsdWUpOworIAkJCWNsR2V0RGV2aWNlSW5mbyhkZXZpY2UsIENMX0RFVklDRV9OQVRJ
VkVfVkVDVE9SX1dJRFRIX0hBTEYsIGFycmF5X3NpemUsICZyZXRfdmFsdWUsICZyZXR1cm5lZF9z
aXplKTsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIENMX0RFVklDRV9OQVRJVkVfVkVDVE9S
X1dJRFRIX0hBTEYgJXVcbiIsIHJldF92YWx1ZSk7CisgCQkJY2xHZXREZXZpY2VJbmZvKGRldmlj
ZSwgQ0xfREVWSUNFX09QRU5DTF9DX1ZFUlNJT04sIGFycmF5X3NpemUsIG91dHB1dF9hcnJheSwg
JnJldHVybmVkX3NpemUpOworIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgQ0xfREVWSUNFX09Q
RU5DTF9DX1ZFUlNJT04gJXNcbiIsIG91dHB1dF9hcnJheSk7CisgI2VuZGlmCisgCQl9CisgCX0g
Ly8gbG9vcCBvZiBhbGwgdGhlIHBsYXRmb3JtcworIAlmcHJpbnRmKHN0ZGVyciwgIkNMX0RFVklD
RV9QUk9GSUxJTkdfVElNRVJfUkVTT0xVVElPTiA9JWlcbiIsIENMX0RFVklDRV9QUk9GSUxJTkdf
VElNRVJfUkVTT0xVVElPTik7CisgfQorICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQpkaWZmIC1y
Y04gb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL29jbC9vY2xIZWxwZXIuaCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmgKKioq
IG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9vY2wvb2NsSGVscGVyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKLS0tIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL29jbC9vY2xIZWxwZXIuaAkyMDExLTExLTI0IDE4OjAwOjAzLjY1
MDk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw3MyAtLS0tCisg
LyoKKyAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1dGhvcnM6
IERhdmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwgU2luZ2gg
PHN1cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8udXJsaW5p
QHN0LmNvbT4KKyAgKgorICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAg
KgorICAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgICovCisgCisgI2lmbmRlZiBvY2xIZWxwZXJfaAorICNkZWZpbmUg
b2NsSGVscGVyX2gKKyAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAKKyAjaW5jbHVkZSAiQ0wvY2wu
aCIKKyAKKyAjZGVmaW5lIFVTRV9DX1BST0ZJTElORyAxCisgI2RlZmluZSBVU0VfT1BFTkNMIDEK
KyAKKyAvLyNkZWZpbmUgUEFOREFfQk9BUkQKKyAgCisgI2RlZmluZSBNQVhfQVJSQVlfU0laRSA1
MTIKKyAjZGVmaW5lIE1BWF9QTEFURk9STVMgMTAKKyAjZGVmaW5lIE1BWF9ERVZJQ0VTIDEwCisg
CisgI2lmIFVTRV9DX1BST0ZJTElORworICNpbmNsdWRlIDxzdGRpby5oPgorIAorIHN0cnVjdCB0
aW1lc3BlYyB0aW1lX2RpZmYoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMg
ZW5kKTsKKyAjZW5kaWYgLy8gVVNFX0NfUFJPRklMSU5HCisgCisgY2xhc3MgT0NMTGF5ZXIKKyB7
CisgcHVibGljOgorIAl2b2lkIG9wZW5jbFNldHVwQ29tbW9uKCk7CisgCXZvaWQgb3BlbmNsU2V0
dXBQcm9ncmFtKGNsX3Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKKyAJ
dm9pZCBvcGVuY2xTZXR1cFByb2dyYW0oY2xfcHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgY2hhciog
ZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGNvbXBpbGVPcHRpb25zKTsKKyAJdm9pZCBvcGVuY2xTZXR1
cEtlcm5lbChjbF9wcm9ncmFtKiBwcm9ncmFtLCBjbF9rZXJuZWwgKmtlcm5lbCwgY29uc3QgY2hh
cioga2VybmVsbmFtZSk7CisgCXZvaWQgb3BlbmNsQ3JlYXRlQnVmZmVyKGNsX21lbSogYnVmLCBj
b25zdCBjbF9tZW1fZmxhZ3MgZmxhZ3MsIGNvbnN0IHNpemVfdCBzaXplKTsKKyAJdm9pZCBvcGVu
Y2xXcml0ZUJ1ZmZlcihjbF9tZW0qIGJ1ZiwgY29uc3Qgc2l6ZV90IG9mZnNldCwgY29uc3Qgc2l6
ZV90IHNpemUsIGNvbnN0IHZvaWQqIHNyYywgY29uc3QgYm9vbCBwcm9maWxlKTsKKyAJdm9pZCBv
cGVuY2xTZXRLZXJuZWxBcmcoY2xfa2VybmVsKiBrZXJuZWwsIGNvbnN0IHVuc2lnbmVkIGludCBh
cmdfaWQsIGNvbnN0IHNpemVfdCBzaXplLCBjb25zdCB2b2lkKiBhcmcpOworIAl2b2lkIG9wZW5j
bFJ1bktlcm5lbChjbF9rZXJuZWwqIGtlcm5lbCwgY29uc3QgdW5zaWduZWQgaW50IGRpbSwgY29u
c3Qgc2l6ZV90KiBvZmZzZXQsIGNvbnN0IHNpemVfdCogZ2xvYmFsX3NpemUsIGNvbnN0IHNpemVf
dCogbG9jYWxfc2l6ZSwgY29uc3QgYm9vbCBwcm9maWxlKTsKKyAJdm9pZCBvcGVuY2xSdW5LZXJu
ZWxUYXNrKGNsX2tlcm5lbCoga2VybmVsLCBjb25zdCBib29sIHByb2ZpbGUpOworIAl2b2lkIG9w
ZW5jbFJlYWRCdWZmZXIoY2xfbWVtKiBidWYsIGNvbnN0IHNpemVfdCBvZmZzZXQsIGNvbnN0IHNp
emVfdCBzaXplLCB2b2lkKiBkc3QsIGNvbnN0IGJvb2wgcHJvZmlsZSk7CisgCXZvaWQgb3BlbmNs
Q2xlYW5VcEJ1ZmZlcihjbF9tZW0qIGJ1Zik7CisgCXZvaWQgb3BlbmNsQ2xlYW5VcEtlcm5lbChj
bF9rZXJuZWwqIGtlcm5lbCk7CisgCXZvaWQgb3BlbmNsQ2xlYW5VcFByb2dyYW0oY2xfcHJvZ3Jh
bSogcHJvZ3JhbSk7CisgCXZvaWQgb3BlbmNsQ2xlYW5VcENvbW1vbigpOworIAl2b2lkIG9wZW5j
bFBsYXRmb3JtQ2FwYWJpbGl0aWVzUXVlcnkoKTsKKyAKKyBwcml2YXRlOgorIAl2b2lkIG9wZW5j
bFByaW50RXJyb3IoKTsKKyAKKyAJY2xfaW50IGVycm9yOworIAljbF9wbGF0Zm9ybV9pZCBwbGF0
Zm9ybTsKKyAJY2xfZGV2aWNlX2lkIGRldmljZTsKKyAJY2xfY29udGV4dCBjb250ZXh0OworIAlj
bF9jb21tYW5kX3F1ZXVlIGNvbW1hbmRfcXVldWU7CisgfTsKKyAKKyAjZW5kaWYgLy8gRU5BQkxF
KE9QRU5DTCkKKyAKKyAjZW5kaWYgLy8gb2NsSGVscGVyX2gKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116591</attachid>
            <date>2011-11-25 04:00:00 -0800</date>
            <delta_ts>2011-11-25 04:00:00 -0800</delta_ts>
            <desc>Set of modified common files for OpenCL support</desc>
            <filename>common_files_modified.patch</filename>
            <type>text/plain</type>
            <size>1749</size>
            <attacher name="Giulio Urlini">sentangeleyes</attacher>
            
              <data encoding="base64">ZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAoqKiogb3JpZ2luYWwvV2Vi
S2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
CTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1ICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dl
YktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAkyMDExLTExLTI0IDE4OjAwOjAzLjkxMDk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioq
IDQsOSAqKioqCi0tLSA0LDEwIC0tLS0KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMu
CiAgICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0cm9u
aWNzIC0gQXV0aG9yczogRGF2aWQgQ29yaWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1cmlu
ZGVyIFBhbCBTaW5naCA8c3VyaW5kZXItcGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxpbmkg
PGdpdWxpby51cmxpbmlAc3QuY29tPgogICAqCiAgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCioqKioqKioqKioq
KioqKgoqKiogNDYsNTEgKioqKgotLS0gNDcsNTggLS0tLQogICNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oIgogICNlbmRpZgogIAorICNpZiBFTkFCTEUoT1BFTkNMKQorICNpbmNs
dWRlIDxvY2wvb2NsSGVscGVyLmg+CisgLy9PQ0xMYXllciBjbGFzcyBkZWNsYXJlZCBnbG9iYWwg
Zm9yIGVhc3kgYWNjZXNzIChUT0RPOiBGaW5kIGEgYmV0dGVyIHBsYWNlIGZvciB0aGlzLi4uKQor
IE9DTExheWVyIGdwdTsKKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKKyAKICB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogIAogIG5hbWVzcGFjZSBXZWJDb3JlIHsKKioqKioqKioqKioqKioqCioqKiA1
Niw2NiAqKioqCi0tLSA2Myw4MCAtLS0tCiAgICAgICwgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5z
Zm9ybVVwZGF0ZSh0cnVlKQogICAgICAsIG1fbmVlZHNTaXplTmVnb3RpYXRpb25XaXRoSG9zdERv
Y3VtZW50KGZhbHNlKQogIHsKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAJZnByaW50ZihzdGRlcnIs
ICJvcGVuY2xjb21tb24gY2FsbGVkIVxuIik7CiAgICAgIHNldFJlcGxhY2VkKHRydWUpOworIAln
cHUub3BlbmNsU2V0dXBDb21tb24oKTsKKyAjZW5kaWYKICB9CiAgCiAgUmVuZGVyU1ZHUm9vdDo6
flJlbmRlclNWR1Jvb3QoKQogIHsKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAJZ3B1Lm9wZW5jbENs
ZWFuVXBDb21tb24oKTsKKyAjZW5kaWYKICB9CiAgCiAgdm9pZCBSZW5kZXJTVkdSb290Ojpjb21w
dXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvLCBi
b29sJiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplKSBjb25zdAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116593</attachid>
            <date>2011-11-25 04:02:31 -0800</date>
            <delta_ts>2011-11-25 04:02:31 -0800</delta_ts>
            <desc>Makefiles and configuration for OpenCL optional support</desc>
            <filename>config_make_files.patch</filename>
            <type>text/plain</type>
            <size>9245</size>
            <attacher name="Giulio Urlini">sentangeleyes</attacher>
            
              <data encoding="base64">ZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvY29uZmlndXJlLmFjIHdlYmtpdF9vcGVu
Y2wvV2ViS2l0LXI5NTM1OC9jb25maWd1cmUuYWMKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgv
Y29uZmlndXJlLmFjCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1ICswMTAwCi0tLSB3ZWJr
aXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvY29uZmlndXJlLmFjCTIwMTEtMTEtMjQgMTg6MDA6MDUu
NDg2OTUwMDk3ICswMTAwCioqKioqKioqKioqKioqKgoqKiogMzkwLDM5NSAqKioqCi0tLSAzOTAs
NDA5IC0tLS0KICBmaQogIEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCiAgCisgIyBjaGVjayB3aGV0
aGVyIHRvIGVuYWJsZSBPcGVuQ0wgc3VwcG9ydAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0
byBlbmFibGUgT3BlbkNMIHN1cHBvcnRdKQorIEFDX0FSR19FTkFCTEUob3BlbmNsLAorICAgICAg
ICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9wZW5jbF0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE9wZW5DTCBbZGVmYXVsdD1ub11d
KSwKKyAgICAgICAgICAgICAgIFtdLCBbZW5hYmxlX29wZW5jbD0ibm8iXSkKKyBBQ19NU0dfUkVT
VUxUKFskZW5hYmxlX29wZW5jbF0pCisgCisgaWYgdGVzdCAiJGVuYWJsZV9vcGVuY2wiID0gInll
cyI7IHRoZW4KKyAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbQ0wvY2wuaF0sIFtdLCBBQ19NU0dfRVJS
T1IoW09wZW5DbCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgIE9QRU5HTF9MSUJTPS1sT3BlbkNM
CisgZmkKKyBBQ19TVUJTVChbT1BFTkNMX0xJQlNdKQorIAogICMgY2hlY2sgd2hldGhlciB0byBl
bmFibGUgY2hhbm5lbCBtZXNzYWdpbmcgc3VwcG9ydAogIEFDX01TR19DSEVDS0lORyhbd2hldGhl
ciB0byBlbmFibGUgSFRNTDUgQ2hhbm5lbCBNZXNzYWdpbmcgc3VwcG9ydF0pCiAgQUNfQVJHX0VO
QUJMRShjaGFubmVsX21lc3NhZ2luZywKKioqKioqKioqKioqKioqCioqKiAxMTIxLDExMjYgKioq
KgotLS0gMTEzNSwxMTQxIC0tLS0KICBBTV9DT05ESVRJT05BTChbRU5BQkxFX0RFQlVHXSxbdGVz
dCAiJGVuYWJsZV9kZWJ1Z19mZWF0dXJlcyIgPSAieWVzIl0pCiAgQU1fQ09ORElUSU9OQUwoW0VO
QUJMRV8zRF9SRU5ERVJJTkddLFt0ZXN0ICIkZW5hYmxlXzNkX3JlbmRlcmluZyIgPSAieWVzIl0p
CiAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9XRUJHTF0sW3Rlc3QgIiRlbmFibGVfd2ViZ2wiID0g
InllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfT1BFTkNMXSxbdGVzdCAiJGVuYWJsZV9v
cGVuY2wiID0gInllcyJdKQogIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfQkxPQl0sW3Rlc3QgIiRl
bmFibGVfYmxvYiIgPSAieWVzIl0pCiAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9NRVRFUl9UQUdd
LFt0ZXN0ICIkZW5hYmxlX21ldGVyX3RhZyIgPSAieWVzIl0pCiAgQU1fQ09ORElUSU9OQUwoW0VO
QUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJXSxbdGVzdCAiJGVuYWJsZV9wYWdlX3Zpc2liaWxpdHlf
YXBpIiA9ICJ5ZXMiXSkKKioqKioqKioqKioqKioqCioqKiAxMjMwLDEyMzUgKioqKgotLS0gMTI0
NSwxMjUxIC0tLS0KICBGZWF0dXJlczoKICAgM0QgUmVuZGVyaW5nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlXzNkX3JlbmRlcmluZwogICBXZWJH
TCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRl
bmFibGVfd2ViZ2wKKyAgT3BlbkNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAkZW5hYmxlX29wZW5jbAogICBCbG9iIHN1cHBvcnQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfYmxvYgogICBEZXZp
Y2VPcmllbnRhdGlvbiBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRl
bmFibGVfZGV2aWNlX29yaWVudGF0aW9uCiAgIERpcmVjdG9yeSB1cGxvYWQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9kaXJlY3RvcnlfdXBsb2FkCmRp
ZmYgLXJjTiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAoqKiogb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkyMDExLTExLTI0IDE4OjAxOjM0LjUyNjk1MDE1NSArMDEwMAotLS0gd2Via2l0X29wZW5j
bC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CTIwMTEtMTEtMjQg
MTg6MDA6MDMuMjUwOTUwMDk2ICswMTAwCioqKioqKioqKioqKioqKgoqKiogMzMsMzggKioqKgot
LS0gMzMsMzkgLS0tLQogICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MiCiAg
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzIgogICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0iCisgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbCIKICAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMiCiAgICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycyIKICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcCIKKioqKioqKioqKioqKioqCioqKiAxMTA4LDExMTMgKioqKgotLS0g
MTEwOSwxMTE3IC0tLS0KICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVz
c2lhbkJsdXJORU9OLmgKICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdo
dGluZ05FT04uY3BwCiAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRp
bmdORU9OLmgKKyAgICAgCisgCQlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9vY2xIZWxw
ZXIuY3BwCisgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL29jbEhlbHBlci5oCiAg
CiAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAog
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcApkaWZmIC1yY04gb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0JMjAxMS0xMS0yNCAxODowMTozNC41MjY5NTAxNTUgKzAxMDAKLS0tIHdl
YmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQky
MDExLTExLTI0IDE4OjAwOjAzLjI1NDk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDU2
Nyw1NzIgKioqKgotLS0gNTY3LDU4MSAtLS0tCiAgd2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJM
RV9XRUJHTD0xCiAgZW5kaWYgICMgRU5EIEVOQUJMRV9XRUJHTAogIAorICMgT3BlbkNMIHN1cHBv
cnQKKyAjIC0tLQorIGlmIEVOQUJMRV9PUEVOQ0wKKyBGRUFUVVJFX0RFRklORVMgKz0gRU5BQkxF
X09QRU5DTD0xCisgd2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9PUEVOQ0w9MQorIGVuZGlm
ICAjIEVORCBFTkFCTEVfT1BFTkNMCisgCisgIyAtLS0KKyAKICAjIC0tLQogICMgM0QgcmVuZGVy
aW5nIChDU1MzIDNEIHRyYW5zZm9ybXMpIHN1cHBvcnQKICAjIC0tLQpkaWZmIC1yY04gb3JpZ2lu
YWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIHdlYmtp
dF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CioqKiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JMjAxMS0xMS0yNCAxODowMTozNC41MzA5NTAxNTUgKzAxMDAKLS0tIHdlYmtpdF9vcGVu
Y2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCTIwMTEt
MTEtMjQgMTg6MDA6MDMuMjU4OTUwMDk2ICswMTAwCioqKioqKioqKioqKioqKgoqKiogMjQ5NSwy
NTAwICoqKioKLS0tIDI0OTUsMjUwMiAtLS0tCiAgCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvYXJtL0ZFR2F1c3NpYW5CbHVyTkVPTi5oIFwKICAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uY3BwIFwKICAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05F
T04uaCBcCisgCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL29j
bEhlbHBlci5jcHAgXAorIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L29jbC9vY2xIZWxwZXIuaCBcCiAgCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQzRC5jcHAgXAogIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50M0QuaCBcCiAgCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuY3BwIFwKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTMwOTUwMTU1ICswMTAwCi0tLSB3ZWJraXRf
b3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCTIwMTEtMTEt
MjQgMTg6MDA6MDMuMjYyOTUwMDk2ICswMTAwCioqKioqKioqKioqKioqKgoqKiogMzYyNywzNjMy
ICoqKioKLS0tIDM2MjcsMzYzNCAtLS0tCiAgICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmgnLAogICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uY3BwJywKICAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9OLmgnLAor
IAkJCQkJCSdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9vY2xIZWxwZXIuY3BwJywKKyAJ
CQkJCQkncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmgnLAogICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAn
LAogICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhRnJlZVR5cGUuY3BwJywKICAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oJywKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1y
OTUzNTgvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1
MzU4L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCioqKiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1
ICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8JMjAxMS0xMS0yNCAxODowMDowMy4yNzg5NTAwOTYgKzAxMDAKKioqKioqKioqKioq
KioqCioqKiAxOTg5LDE5OTQgKioqKgotLS0gMTk4OSwxOTk1IC0tLS0KICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggXAogICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5oIFwKICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9OLmggXAorICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL29jbC9vY2xIZWxwZXIuaCBcCiAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQzRC5oIFwKICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oIFwKICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggXAoqKioqKioqKioqKioqKioKKioqIDMxOTgs
MzIwNCAqKioqCiAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcCBcCiAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwIFwKICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdO
RU9OLmNwcCBcCiEgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNz
aWFuQmx1ck5FT04uY3BwCiAgfQogIAogIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9NQVRITUw9
MSkgewotLS0gMzE5OSwzMjA2IC0tLS0KICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwIFwKICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAgXAogICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9h
cm0vRkVMaWdodGluZ05FT04uY3BwIFwKISAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvYXJtL0ZFR2F1c3NpYW5CbHVyTkVPTi5jcHAgXAohICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmNwcAogIH0KICAKICBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfTUFUSE1MPTEpIHsKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1Nv
dXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCioqKiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4
L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0
OTUwMTU1ICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYktp
dC9ndGsvR05VbWFrZWZpbGUuYW0JMjAxMS0xMS0yNCAxODowMDowNC4wNDI5NTAwOTYgKzAxMDAK
KioqKioqKioqKioqKioqCioqKiAxMDAsMTA1ICoqKioKLS0tIDEwMCwxMDYgLS0tLQogIAkkKExJ
QlhNTF9MSUJTKSBcCiAgCSQoTElCWFNMVF9MSUJTKSBcCiAgCSQoT1BFTkdMX0xJQlMpIFwKKyAJ
JChPUEVOQ0xfTElCUykgXAogIAkkKFBBTkdPX0xJQlMpIFwKICAJJChQTkdfTElCUykgXAogIAkk
KFNRTElURTNfTElCUykgXApkaWZmIC1yY04gb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Ub29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvVG9vbHMvU2Ny
aXB0cy9idWlsZC13ZWJraXQKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvVG9vbHMvU2NyaXB0
cy9idWlsZC13ZWJraXQJMjAxMS0xMS0yNCAxODowMTozNC41MzQ5NTAxNTUgKzAxMDAKLS0tIHdl
YmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkyMDEx
LTExLTI0IDE4OjAwOjA1LjA0Njk1MDA5OSArMDEwMAoqKioqKioqKioqKioqKioKKioqIDQsOSAq
KioqCi0tLSA0LDEwIC0tLS0KICAjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICMgQ29weXJpZ2h0IChDKSAyMDEwIG1vaWppLW1vYmlsZS5jb20g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAjIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjIENvcHlyaWdodCAoQykgMjAx
MSBTVC1NaWNyb2VsZWN0cm9uaWNzIC0gQXV0aG9yczogRGF2aWQgQ29yaWF0IDxkYXYuY29yaWF0
QGdtYWlsLmNvbT4sIFN1cmluZGVyIFBhbCBTaW5naCA8c3VyaW5kZXItcGFsLnNpbmdoQHN0LmNv
bT4sIEdpdWxpbyBVcmxpbmkgPGdpdWxpby51cmxpbmlAc3QuY29tPgogICMKICAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCioqKioqKioqKioqKioqKgoqKiogNjYsNzEgKioqKgotLS0gNjcsNzMg
LS0tLQogIG15ICgKICAgICAgJHJlcXVlc3RBbmltYXRpb25GcmFtZVN1cHBvcnQsCiAgICAgICR0
aHJlZURDYW52YXNTdXBwb3J0LAorICAgICAkb3BlbmNsU3VwcG9ydCwKICAgICAgJHRocmVlRFJl
bmRlcmluZ1N1cHBvcnQsCiAgICAgICRhY2NlbGVyYXRlZDJkQ2FudmFzU3VwcG9ydCwKICAgICAg
JGFuaW1hdGlvbkFQSVN1cHBvcnQsCioqKioqKioqKioqKioqKgoqKiogMTM0LDEzOSAqKioqCi0t
LSAxMzYsMTQ0IC0tLS0KICAgICAgeyBvcHRpb24gPT4gIjNkLWNhbnZhcyIsIGRlc2MgPT4gIlRv
Z2dsZSAzRCBjYW52YXMgKFdlYkdMKSBzdXBwb3J0IiwKICAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9XRUJHTCIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSAmJiAhaXNMZW9wYXJkKCkp
LCB2YWx1ZSA9PiBcJHRocmVlRENhbnZhc1N1cHBvcnQgfSwKICAKKyAgICAgeyBvcHRpb24gPT4g
Im9wZW5jbCIsIGRlc2MgPT4gIlRvZ2dsZSBPcGVuQ0wgc3VwcG9ydCIsCisgICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfT1BFTkNMIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpICYmICFp
c0xlb3BhcmQoKSksIHZhbHVlID0+IFwkb3BlbmNsU3VwcG9ydCB9LAorIAogICAgICB7IG9wdGlv
biA9PiAiM2QtcmVuZGVyaW5nIiwgZGVzYyA9PiAiVG9nZ2xlIDNEIHJlbmRlcmluZyBzdXBwb3J0
IiwKICAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IChp
c0FwcGxlTWFjV2ViS2l0KCkgfHwgaXNRdCgpKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdT
dXBwb3J0IH0sCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116594</attachid>
            <date>2011-11-25 04:03:29 -0800</date>
            <delta_ts>2011-11-25 04:03:29 -0800</delta_ts>
            <desc>Set of SVG filters modified with optional OpenCL support</desc>
            <filename>filters_modified.patch</filename>
            <type>text/plain</type>
            <size>52808</size>
            <attacher name="Giulio Urlini">sentangeleyes</attacher>
            
              <data encoding="base64">ZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAoqKiog
b3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1ICswMTAwCi0t
LSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkyMDExLTExLTI0IDE4OjAwOjAzLjY0Mjk1MDA5NiAr
MDEwMAoqKioqKioqKioqKioqKioKKioqIDMsOCAqKioqCi0tLSAzLDkgLS0tLQogICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1dGhvcnM6IERhdmlkIENvcmlhdCA8ZGF2LmNv
cmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwgU2luZ2ggPHN1cmluZGVyLXBhbC5zaW5naEBz
dC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8udXJsaW5pQHN0LmNvbT4KICAgKgogICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwoqKioqKioqKioqKioqKioKKioqIDQxLDQ3ICoqKioKLS0tIDQyLDg0IC0tLS0K
ICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogICAgICAsIG1fbW9kZShtb2RlKQogIHsKKyAj
aWYgRU5BQkxFKE9QRU5DTCkKKyAJZ3B1Lm9wZW5jbFNldHVwUHJvZ3JhbSgmbV9wcm9ncmFtLCAi
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUJs
ZW5kT0NMLmNsIik7CisgCXN3aXRjaChtX21vZGUpCisgCXsKKyAJY2FzZSBGRUJMRU5EX01PREVf
VU5LTk9XTjoKKyAJCWJyZWFrOworIAljYXNlIEZFQkxFTkRfTU9ERV9OT1JNQUw6CisgCQlncHUu
b3BlbmNsU2V0dXBLZXJuZWwoJm1fcHJvZ3JhbSwgJm1fa2VybmVsLCAiTm9ybWFsQmxlbmQiKTsK
KyAJCWJyZWFrOworIAljYXNlIEZFQkxFTkRfTU9ERV9NVUxUSVBMWToKKyAJCWdwdS5vcGVuY2xT
ZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAmbV9rZXJuZWwsICJNdWx0aXBseUJsZW5kIik7CisgCQli
cmVhazsKKyAJY2FzZSBGRUJMRU5EX01PREVfU0NSRUVOOgorIAkJZ3B1Lm9wZW5jbFNldHVwS2Vy
bmVsKCZtX3Byb2dyYW0sICZtX2tlcm5lbCwgIlNjcmVlbkJsZW5kIik7CisgCQlicmVhazsKKyAJ
Y2FzZSBGRUJMRU5EX01PREVfREFSS0VOOgorIAkJZ3B1Lm9wZW5jbFNldHVwS2VybmVsKCZtX3By
b2dyYW0sICZtX2tlcm5lbCwgIkRhcmtlbkJsZW5kIik7CisgCQlicmVhazsKKyAJY2FzZSBGRUJM
RU5EX01PREVfTElHSFRFTjoKKyAJCWdwdS5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAm
bV9rZXJuZWwsICJMaWdodGVuQmxlbmQiKTsKKyAJCWJyZWFrOworIAlkZWZhdWx0OgorIAkJYnJl
YWs7CisgCX0KKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKKyB9CisgCisgI2lmIEVOQUJMRShP
UEVOQ0wpCisgRkVCbGVuZDo6fkZFQmxlbmQoKQorIHsKKyAJaWYobV9tb2RlICE9IEZFQkxFTkRf
TU9ERV9VTktOT1dOKQorIAl7CisgCQlncHUub3BlbmNsQ2xlYW5VcEtlcm5lbCgmbV9rZXJuZWwp
OworIAl9CisgCWdwdS5vcGVuY2xDbGVhblVwUHJvZ3JhbSgmbV9wcm9ncmFtKTsKICB9CisgI2Vu
ZGlmIC8vIEVOQUJMRShPUEVOQ0wpCiAgCiAgUGFzc1JlZlB0cjxGRUJsZW5kPiBGRUJsZW5kOjpj
cmVhdGUoRmlsdGVyKiBmaWx0ZXIsIEJsZW5kTW9kZVR5cGUgbW9kZSkKICB7CioqKioqKioqKioq
KioqKgoqKiogNjEsNjYgKioqKgotLS0gOTgsMTYxIC0tLS0KICAgICAgcmV0dXJuIHRydWU7CiAg
fQogIAorICNpZiBFTkFCTEUoT1BFTkNMKQorIGlubGluZSB2b2lkIEZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlPQ0woUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheUEsIFJlZlB0cjxCeXRlQXJy
YXk+IHNyY1BpeGVsQXJyYXlCLCBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkpCisgeworIAl1bnNp
Z25lZCBpbnQgbGVuZ3RoID0gZHN0UGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgCisgCWlmKG1fbW9k
ZSA9PSBGRUJMRU5EX01PREVfVU5LTk9XTikKKyAJeworIAkJZm9yKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKQorIAkJeworIAkJCWRzdFBpeGVsQXJyYXktPnNldChpLCh1bnNp
Z25lZCBjaGFyKSAwKTsKKyAJCX0KKyAKKyAJCXJldHVybjsKKyAJfQorIAorIAljbF9tZW0gYWJ1
ZjsKKyAJY2xfbWVtIGJidWY7CisgCWNsX21lbSBvdXRidWY7CisgCWJvb2wgcHJvZmlsZV9rZXJu
ZWwgPSB0cnVlOworIAlib29sIHByb2ZpbGVfYnVmZmVyX3J3ID0gZmFsc2U7CisgCXNpemVfdCBz
aXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogbGVuZ3RoOworIAlmcHJpbnRmKHN0ZGVyciwg
IlNpemUgb2YgaW4vb3V0IGJ1ZmZlcnMgaXMgJWlcbiIsIHNpemUpOworIAl1bnNpZ25lZCBpbnQg
Ym91bmRhcnkgPSBsZW5ndGggLyA0OworIAlzaXplX3QgYmxlbmRfbG9jYWxfd29ya19zaXplWzFd
ID0gezF9OworIAlzaXplX3QgYmxlbmRfZ2xvYmFsX3dvcmtfc2l6ZVsxXSA9IHswfTsKKyAKKyAJ
d2hpbGUoYmxlbmRfZ2xvYmFsX3dvcmtfc2l6ZVswXSA8IGJvdW5kYXJ5KQorIAl7CisgCQlibGVu
ZF9nbG9iYWxfd29ya19zaXplWzBdICs9IGJsZW5kX2xvY2FsX3dvcmtfc2l6ZVswXTsKKyAJfQor
IAorIAlncHUub3BlbmNsQ3JlYXRlQnVmZmVyKCZhYnVmLCAgIENMX01FTV9SRUFEX1dSSVRFLCBz
aXplKTsKKyAJZ3B1Lm9wZW5jbENyZWF0ZUJ1ZmZlcigmYmJ1ZiwgICBDTF9NRU1fUkVBRF9XUklU
RSwgc2l6ZSk7CisgCWdwdS5vcGVuY2xDcmVhdGVCdWZmZXIoJm91dGJ1ZiwgQ0xfTUVNX1JFQURf
V1JJVEUsIHNpemUpOworIAorIAlncHUub3BlbmNsV3JpdGVCdWZmZXIoJmFidWYsIDAsIHNpemUs
ICh2b2lkKikgc3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgcHJvZmlsZV9idWZmZXJfcncpOworIAln
cHUub3BlbmNsV3JpdGVCdWZmZXIoJmJidWYsIDAsIHNpemUsICh2b2lkKikgc3JjUGl4ZWxBcnJh
eUItPmRhdGEoKSwgcHJvZmlsZV9idWZmZXJfcncpOworIAorIAlncHUub3BlbmNsU2V0S2VybmVs
QXJnKCZtX2tlcm5lbCwgMCwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikgJmFidWYpOworIAlncHUu
b3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgMSwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikg
JmJidWYpOworIAlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgMiwgc2l6ZW9mKGNs
X21lbSksICh2b2lkKikgJm91dGJ1Zik7CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2Vy
bmVsLCAzLCBzaXplb2YodW5zaWduZWQgaW50KSwgKHZvaWQqKSAmYm91bmRhcnkpOworIAorIAln
cHUub3BlbmNsUnVuS2VybmVsKCZtX2tlcm5lbCwgMSwgTlVMTCwgYmxlbmRfZ2xvYmFsX3dvcmtf
c2l6ZSwgYmxlbmRfbG9jYWxfd29ya19zaXplLCBwcm9maWxlX2tlcm5lbCk7CisgCisgCWdwdS5v
cGVuY2xSZWFkQnVmZmVyKCZvdXRidWYsIDAsIHNpemUsICh2b2lkKikgZHN0UGl4ZWxBcnJheS0+
ZGF0YSgpLCBwcm9maWxlX2J1ZmZlcl9ydyk7CisgCisgCWdwdS5vcGVuY2xDbGVhblVwQnVmZmVy
KCZhYnVmKTsKKyAJZ3B1Lm9wZW5jbENsZWFuVXBCdWZmZXIoJmJidWYpOworIAlncHUub3BlbmNs
Q2xlYW5VcEJ1ZmZlcigmb3V0YnVmKTsKKyB9CisgI2VuZGlmCisgCiAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgdW5rbm93bih1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFy
LCB1bnNpZ25lZCBjaGFyKQogIHsKICAgICAgcmV0dXJuIDA7CioqKioqKioqKioqKioqKgoqKiog
OTMsOTggKioqKgotLS0gMTg4LDE5OSAtLS0tCiAgCiAgdm9pZCBGRUJsZW5kOjphcHBseSgpCiAg
eworICNpZmRlZiBVU0VfQ19QUk9GSUxJTkcKKyAJc3RydWN0IHRpbWVzcGVjIHRpbWUxLCB0aW1l
MiwgdGRpZmY7CisgCisgCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdGltZTEpOwor
ICNlbmRpZiAvLyBVU0VfQ19QUk9GSUxJTkcKKyAKICAgICAgaWYgKGhhc1Jlc3VsdCgpKQogICAg
ICAgICAgcmV0dXJuOwogICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cioq
KioqKioqKioqKioqKgoqKiogMTE1LDEyMCAqKioqCi0tLSAyMTYsMjI0IC0tLS0KICAgICAgSW50
UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1Bp
eGVsQXJyYXlCID0gaW4yLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2luZ1JlY3Qp
OwogIAorICNpZiBFTkFCTEUoT1BFTkNMKSAmJiBVU0VfT1BFTkNMCisgICAgIHBsYXRmb3JtQXBw
bHlPQ0woc3JjUGl4ZWxBcnJheUEsIHNyY1BpeGVsQXJyYXlCLCBkc3RQaXhlbEFycmF5KTsKKyAj
ZWxzZQogICAgICAvLyBLZWVwIHN5bmNocm9uaXplZCB3aXRoIEJsZW5kTW9kZVR5cGUKICAgICAg
c3RhdGljIGNvbnN0IEJsZW5kVHlwZSBjYWxsRWZmZWN0W10gPSB7dW5rbm93biwgbm9ybWFsLCBt
dWx0aXBseSwgc2NyZWVuLCBkYXJrZW4sIGxpZ2h0ZW59OwogIAoqKioqKioqKioqKioqKioKKioq
IDEzMywxMzggKioqKgotLS0gMjM3LDI0OSAtLS0tCiAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFs
cGhhUiA9IDI1NSAtICgoMjU1IC0gYWxwaGFBKSAqICgyNTUgLSBhbHBoYUIpKSAvIDI1NTsKICAg
ICAgICAgIGRzdFBpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGFscGhhUik7CiAgICAg
IH0KKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkgJiYgVVNFX09QRU5DTAorIAorICNpZmRlZiBV
U0VfQ19QUk9GSUxJTkcKKyAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0aW1lMik7
CisgCXRkaWZmID0gdGltZV9kaWZmKHRpbWUxLHRpbWUyKTsKKyAJcHJpbnRmKCJUaW1lIHRha2Vu
IHRvIGJsZW5kID0gJWxkIHNlYyAlbGQgbnNlYyBcblxuIiwgdGRpZmYudHZfc2VjLCB0ZGlmZi50
dl9uc2VjKTsKKyAjZW5kaWYgLy8gVVNFX0NfUFJPRklMSU5HCiAgfQogIAogIHZvaWQgRkVCbGVu
ZDo6ZHVtcCgpCmRpZmYgLXJjTiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIHdlYmtpdF9vcGVuY2wvV2ViS2l0
LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aAoqKiogb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkyMDExLTExLTI0IDE4OjAxOjM0LjUzNDk1MDE1NSArMDEw
MAotLS0gd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCTIwMTEtMTEtMjQgMTg6MDA6MDMuNjQyOTUwMDk2
ICswMTAwCioqKioqKioqKioqKioqKgoqKiogMiw3ICoqKioKLS0tIDIsOCAtLS0tCiAgICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0cm9uaWNzIC0g
QXV0aG9yczogRGF2aWQgQ29yaWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1cmluZGVyIFBh
bCBTaW5naCA8c3VyaW5kZXItcGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxpbmkgPGdpdWxp
by51cmxpbmlAc3QuY29tPgogICAqCiAgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCioqKioqKioqKioqKioqKgoq
KiogMjcsMzIgKioqKgotLS0gMjgsMzggLS0tLQogIAogICNpbmNsdWRlICJGaWx0ZXIuaCIKICAK
KyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAjaW5jbHVkZSA8b2NsL29jbEhlbHBlci5oPgorIGV4dGVy
biBPQ0xMYXllciBncHU7CisgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisgCiAgbmFtZXNwYWNl
IFdlYkNvcmUgewogIAogIGVudW0gQmxlbmRNb2RlVHlwZSB7CioqKioqKioqKioqKioqKgoqKiog
NTIsNTkgKioqKgogIAogIHByaXZhdGU6CiAgICAgIEZFQmxlbmQoRmlsdGVyKiwgQmxlbmRNb2Rl
VHlwZSk7CiEgCiAgICAgIEJsZW5kTW9kZVR5cGUgbV9tb2RlOwogIH07CiAgCiAgfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotLS0gNTgsNzMgLS0tLQogIAogIHByaXZhdGU6CiAgICAgIEZFQmxlbmQo
RmlsdGVyKiwgQmxlbmRNb2RlVHlwZSk7CiEgI2lmIEVOQUJMRShPUEVOQ0wpCiEgICAgIH5GRUJs
ZW5kKCk7CiEgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCiAgICAgIEJsZW5kTW9kZVR5cGUgbV9t
b2RlOworIAorICNpZiBFTkFCTEUoT1BFTkNMKQorICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFw
cGx5T0NMKFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJyYXlBLCBSZWZQdHI8Qnl0ZUFycmF5
PiBzcmNQaXhlbEFycmF5QiwgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5KTsKKyAgICAgY2xfcHJv
Z3JhbSBtX3Byb2dyYW07CisgICAgIGNsX2tlcm5lbCBtX2tlcm5lbDsKKyAjZW5kaWYgLy8gRU5B
QkxFKE9QRU5DTCkKICB9OwogIAogIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtcmNOIG9y
aWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAoqKiog
b3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1ICsw
MTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkyMDExLTExLTI0IDE4OjAwOjAz
LjY0Mjk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDMsOCAqKioqCi0tLSAzLDkgLS0t
LQogICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1dGhvcnM6IERhdmlkIENv
cmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwgU2luZ2ggPHN1cmluZGVy
LXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8udXJsaW5pQHN0LmNvbT4K
ICAgKgogICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwoqKioqKioqKioqKioqKioKKioqIDQwLDQ1ICoqKioKLS0t
IDQxLDc5IC0tLS0KICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgLCBtX3ZhbHVlcyh2YWx1ZXMp
CiAgeworICNpZiBFTkFCTEUoT1BFTkNMKQorIAlncHUub3BlbmNsU2V0dXBQcm9ncmFtKCZtX3By
b2dyYW0sICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJu
ZWxzL0ZFQ29sb3JNYXRyaXhPQ0wuY2wiKTsKKyAJc3dpdGNoKG1fdHlwZSkKKyAJeworIAljYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorIAkJYnJlYWs7CisgCWNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKKyAJCWdwdS5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAm
bV9rZXJuZWwsICJNYXRyaXhDb2xvciIpOworIAkJYnJlYWs7CisgCWNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFOgorIAkJZ3B1Lm9wZW5jbFNldHVwS2VybmVsKCZtX3Byb2dyYW0sICZt
X2tlcm5lbCwgIlNhdHVyYXRlQ29sb3IiKTsKKyAJCWJyZWFrOworIAljYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6CisgCQlncHUub3BlbmNsU2V0dXBLZXJuZWwoJm1fcHJvZ3JhbSwg
Jm1fa2VybmVsLCAiSHVlUm90YXRlQ29sb3IiKTsKKyAJCWJyZWFrOworIAljYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorIAkJZ3B1Lm9wZW5jbFNldHVwS2VybmVsKCZt
X3Byb2dyYW0sICZtX2tlcm5lbCwgIkx1bWluYW5jZVRvQWxwaGFDb2xvciIpOworIAkJYnJlYWs7
CisgCWRlZmF1bHQ6CisgCQlicmVhazsKKyAJfQorICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQor
IH0KKyAKKyBGRUNvbG9yTWF0cml4Ojp+RkVDb2xvck1hdHJpeCgpCisgeworICNpZiBFTkFCTEUo
T1BFTkNMKQorIAlpZihtX3R5cGUgIT0gRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV04pCisgCXsK
KyAJCWdwdS5vcGVuY2xDbGVhblVwS2VybmVsKCZtX2tlcm5lbCk7CisgCX0KKyAJZ3B1Lm9wZW5j
bENsZWFuVXBQcm9ncmFtKCZtX3Byb2dyYW0pOworICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQog
IH0KICAKICBQYXNzUmVmUHRyPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShG
aWx0ZXIqIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKKioqKioqKioqKioqKioqCioqKiA3Myw4MyAqKioqCiAgICAgIHJldHVybiB0cnVl
OwogIH0KICAKICBpbmxpbmUgdm9pZCBtYXRyaXgoZG91YmxlJiByZWQsIGRvdWJsZSYgZ3JlZW4s
IGRvdWJsZSYgYmx1ZSwgZG91YmxlJiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVz
KQogIHsKICAgICAgZG91YmxlIHIgPSB2YWx1ZXNbMF0gICogcmVkICsgdmFsdWVzWzFdICAqIGdy
ZWVuICsgdmFsdWVzWzJdICAqIGJsdWUgKyB2YWx1ZXNbM10gICogYWxwaGEgKyB2YWx1ZXNbNF0g
KiAyNTU7CiAgICAgIGRvdWJsZSBnID0gdmFsdWVzWzVdICAqIHJlZCArIHZhbHVlc1s2XSAgKiBn
cmVlbiArIHZhbHVlc1s3XSAgKiBibHVlICsgdmFsdWVzWzhdICAqIGFscGhhICsgdmFsdWVzWzld
ICogMjU1OwohICAgICBkb3VibGUgYiA9IHZhbHVlc1sxMF0gICogcmVkICsgdmFsdWVzWzExXSAg
KiBncmVlbiArIHZhbHVlc1sxMl0gKiBibHVlICsgdmFsdWVzWzEzXSAqIGFscGhhICsgdmFsdWVz
WzE0XSAqIDI1NTsKICAgICAgZG91YmxlIGEgPSB2YWx1ZXNbMTVdICogcmVkICsgdmFsdWVzWzE2
XSAqIGdyZWVuICsgdmFsdWVzWzE3XSAqIGJsdWUgKyB2YWx1ZXNbMThdICogYWxwaGEgKyB2YWx1
ZXNbMTldICogMjU1OwogIAogICAgICByZWQgPSByOwotLS0gMTA3LDE5NSAtLS0tCiAgICAgIHJl
dHVybiB0cnVlOwogIH0KICAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyBpbmxpbmUgdm9pZCBGRUNv
bG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5T0NMKFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkp
CisgeworIAlpZihtX3R5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV04pCisgCQlyZXR1
cm47CisgCisgCXVuc2lnbmVkIGludCBsZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAK
KyAJY2xfbWVtIGluYnVmOworIAljbF9tZW0gb3V0YnVmOworIAljbF9tZW0gdmFsYnVmOworIAor
IAlmbG9hdCBjb3NIdWU7CisgCWZsb2F0IHNpbkh1ZTsKKyAKKyAJYm9vbCBwcm9maWxlX2tlcm5l
bCA9IHRydWU7CisgCWJvb2wgcHJvZmlsZV9idWZmZXJfcncgPSBmYWxzZTsKKyAJc2l6ZV90IHNp
emUgPSBzaXplb2YodW5zaWduZWQgY2hhcikgKiBsZW5ndGg7CisgCXVuc2lnbmVkIGludCB2YWx1
ZXNfYXJyYXlfbGVuZ3RoID0gbV92YWx1ZXMuc2l6ZSgpOworIAlzaXplX3QgdmFsc2l6ZSA9IHZh
bHVlc19hcnJheV9sZW5ndGggKiBzaXplb2YoZmxvYXQpOworIAl1bnNpZ25lZCBpbnQgYm91bmRh
cnkgPSBsZW5ndGggLyA0OworIAlzaXplX3QgY29sb3JfbWF0cml4X2xvY2FsX3dvcmtfc2l6ZVsx
XSA9IHszMn07CisgCXNpemVfdCBjb2xvcl9tYXRyaXhfZ2xvYmFsX3dvcmtfc2l6ZVsxXSA9IHsw
fTsKKyAKKyAJd2hpbGUoY29sb3JfbWF0cml4X2dsb2JhbF93b3JrX3NpemVbMF0gPCBib3VuZGFy
eSkKKyAJeworIAkJY29sb3JfbWF0cml4X2dsb2JhbF93b3JrX3NpemVbMF0gKz0gY29sb3JfbWF0
cml4X2xvY2FsX3dvcmtfc2l6ZVswXTsKKyAJfQorIAorIAlncHUub3BlbmNsQ3JlYXRlQnVmZmVy
KCZpbmJ1ZiwgIENMX01FTV9SRUFEX1dSSVRFLCBzaXplKTsKKyAJZ3B1Lm9wZW5jbENyZWF0ZUJ1
ZmZlcigmb3V0YnVmLCBDTF9NRU1fUkVBRF9XUklURSwgc2l6ZSk7CisgCisgCWdwdS5vcGVuY2xX
cml0ZUJ1ZmZlcigmaW5idWYsIDAsIHNpemUsICh2b2lkKikgcGl4ZWxBcnJheS0+ZGF0YSgpLCBw
cm9maWxlX2J1ZmZlcl9ydyk7CisgCisgCXN3aXRjaChtX3R5cGUpCisgCXsKKyAJY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfTUFUUklYOgorIAkJZ3B1Lm9wZW5jbENyZWF0ZUJ1ZmZlcigmdmFsYnVm
LCBDTF9NRU1fUkVBRF9XUklURSwgdmFsc2l6ZSk7CisgCQlncHUub3BlbmNsV3JpdGVCdWZmZXIo
JnZhbGJ1ZiwgMCwgdmFsc2l6ZSwgKHZvaWQqKSAmbV92YWx1ZXNbMF0sIHByb2ZpbGVfYnVmZmVy
X3J3KTsKKyAJCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAwLCBzaXplb2YoY2xf
bWVtKSwgKHZvaWQqKSAmaW5idWYpOworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJu
ZWwsIDEsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZvdXRidWYpOworIAkJZ3B1Lm9wZW5jbFNl
dEtlcm5lbEFyZygmbV9rZXJuZWwsIDIsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZ2YWxidWYp
OworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWwsIDMsIHNpemVvZih1bnNpZ25l
ZCBpbnQpLCAodm9pZCopICZib3VuZGFyeSk7CisgCQlicmVhazsKKyAJY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU6CisgCQlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwg
MCwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikgJmluYnVmKTsKKyAJCWdwdS5vcGVuY2xTZXRLZXJu
ZWxBcmcoJm1fa2VybmVsLCAxLCBzaXplb2YoY2xfbWVtKSwgKHZvaWQqKSAmb3V0YnVmKTsKKyAJ
CWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAyLCBzaXplb2YoZmxvYXQpLCAodm9p
ZCopICZtX3ZhbHVlc1swXSk7CisgCQlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwg
Mywgc2l6ZW9mKHVuc2lnbmVkIGludCksICh2b2lkKikgJmJvdW5kYXJ5KTsKKyAJCWJyZWFrOwor
IAljYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgCQljb3NIdWUgPSBjb3MobV92
YWx1ZXNbMF0gKiBwaURvdWJsZSAvIDE4MCk7CisgCQlzaW5IdWUgPSBzaW4obV92YWx1ZXNbMF0g
KiBwaURvdWJsZSAvIDE4MCk7CisgCQlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwg
MCwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikgJmluYnVmKTsKKyAJCWdwdS5vcGVuY2xTZXRLZXJu
ZWxBcmcoJm1fa2VybmVsLCAxLCBzaXplb2YoY2xfbWVtKSwgKHZvaWQqKSAmb3V0YnVmKTsKKyAJ
CWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAyLCBzaXplb2YoZmxvYXQpLCAodm9p
ZCopICZjb3NIdWUpOworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWwsIDMsIHNp
emVvZihmbG9hdCksICh2b2lkKikgJnNpbkh1ZSk7CisgCQlncHUub3BlbmNsU2V0S2VybmVsQXJn
KCZtX2tlcm5lbCwgNCwgc2l6ZW9mKHVuc2lnbmVkIGludCksICh2b2lkKikgJmJvdW5kYXJ5KTsK
KyAJY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAJCWdwdS5vcGVu
Y2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAwLCBzaXplb2YoY2xfbWVtKSwgKHZvaWQqKSAmaW5i
dWYpOworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWwsIDEsIHNpemVvZihjbF9t
ZW0pLCAodm9pZCopICZvdXRidWYpOworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJu
ZWwsIDIsIHNpemVvZih1bnNpZ25lZCBpbnQpLCAodm9pZCopICZib3VuZGFyeSk7CisgCQlicmVh
azsKKyAJY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAJCWJyZWFrOworIAl9Cisg
CisgCWdwdS5vcGVuY2xSdW5LZXJuZWwoJm1fa2VybmVsLCAxLCBOVUxMLCBjb2xvcl9tYXRyaXhf
Z2xvYmFsX3dvcmtfc2l6ZSwgY29sb3JfbWF0cml4X2xvY2FsX3dvcmtfc2l6ZSwgcHJvZmlsZV9r
ZXJuZWwpOworIAorIAlncHUub3BlbmNsUmVhZEJ1ZmZlcigmb3V0YnVmLCAwLCBzaXplLCAodm9p
ZCopIHBpeGVsQXJyYXktPmRhdGEoKSwgcHJvZmlsZV9idWZmZXJfcncpOworIAorIAlncHUub3Bl
bmNsQ2xlYW5VcEJ1ZmZlcigmaW5idWYpOworIAlncHUub3BlbmNsQ2xlYW5VcEJ1ZmZlcigmb3V0
YnVmKTsKKyAJaWYobV90eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpCisgCQlncHUu
b3BlbmNsQ2xlYW5VcEJ1ZmZlcigmdmFsYnVmKTsKKyB9CisgI2VuZGlmIC8vIEVOQUJMRShPUEVO
Q0wpCisgCiAgaW5saW5lIHZvaWQgbWF0cml4KGRvdWJsZSYgcmVkLCBkb3VibGUmIGdyZWVuLCBk
b3VibGUmIGJsdWUsIGRvdWJsZSYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykK
ICB7CiAgICAgIGRvdWJsZSByID0gdmFsdWVzWzBdICAqIHJlZCArIHZhbHVlc1sxXSAgKiBncmVl
biArIHZhbHVlc1syXSAgKiBibHVlICsgdmFsdWVzWzNdICAqIGFscGhhICsgdmFsdWVzWzRdICog
MjU1OwogICAgICBkb3VibGUgZyA9IHZhbHVlc1s1XSAgKiByZWQgKyB2YWx1ZXNbNl0gICogZ3Jl
ZW4gKyB2YWx1ZXNbN10gICogYmx1ZSArIHZhbHVlc1s4XSAgKiBhbHBoYSArIHZhbHVlc1s5XSAq
IDI1NTsKISAgICAgZG91YmxlIGIgPSB2YWx1ZXNbMTBdICogcmVkICsgdmFsdWVzWzExXSAqIGdy
ZWVuICsgdmFsdWVzWzEyXSAqIGJsdWUgKyB2YWx1ZXNbMTNdICogYWxwaGEgKyB2YWx1ZXNbMTRd
ICogMjU1OwogICAgICBkb3VibGUgYSA9IHZhbHVlc1sxNV0gKiByZWQgKyB2YWx1ZXNbMTZdICog
Z3JlZW4gKyB2YWx1ZXNbMTddICogYmx1ZSArIHZhbHVlc1sxOF0gKiBhbHBoYSArIHZhbHVlc1sx
OV0gKiAyNTU7CiAgCiAgICAgIHJlZCA9IHI7CioqKioqKioqKioqKioqKgoqKiogMTU4LDE2MyAq
KioqCi0tLSAyNzAsMjgwIC0tLS0KICAKICB2b2lkIEZFQ29sb3JNYXRyaXg6OmFwcGx5KCkKICB7
CisgI2lmIFVTRV9DX1BST0ZJTElORworIAlzdHJ1Y3QgdGltZXNwZWMgdGltZTEsIHRpbWUyLCB0
ZGlmZjsKKyAKKyAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0aW1lMSk7CisgI2Vu
ZGlmIC8vIFVTRV9DX1BST0ZJTElORwogICAgICBpZiAoaGFzUmVzdWx0KCkpCiAgICAgICAgICBy
ZXR1cm47CiAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKioqKioqKioq
KioqKioqCioqKiAxNzQsMTc5ICoqKioKLS0tIDI5MSwyOTkgLS0tLQogICAgICBJbnRSZWN0IGlt
YWdlUmVjdChJbnRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgIFJl
ZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGltYWdlUmVjdCk7CiAgCisgI2lmIEVOQUJMRShPUEVOQ0wpICYmIFVTRV9PUEVO
Q0wKKyAgICAgcGxhdGZvcm1BcHBseU9DTChwaXhlbEFycmF5KTsKKyAjZWxzZQogICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAg
ICAgICAgYnJlYWs7CioqKioqKioqKioqKioqKgoqKiogMTkxLDE5OCAqKioqCiAgICAgICAgICBz
ZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQohIAogICAgICBy
ZXN1bHRJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHBpeGVsQXJyYXkuZ2V0KCksIGlt
YWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiAgfQogIAogIHZvaWQgRkVD
b2xvck1hdHJpeDo6ZHVtcCgpCi0tLSAzMTEsMzIzIC0tLS0KICAgICAgICAgIHNldElzQWxwaGFJ
bWFnZSh0cnVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiEgI2VuZGlmIC8vIEVOQUJMRShP
UEVOQ0wpICYmIFVTRV9PUEVOQ0wKICAgICAgcmVzdWx0SW1hZ2UtPnB1dFVubXVsdGlwbGllZElt
YWdlRGF0YShwaXhlbEFycmF5LmdldCgpLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIElu
dFBvaW50KCkpOworICNpZiBVU0VfQ19QUk9GSUxJTkcKKyAJY2xvY2tfZ2V0dGltZShDTE9DS19N
T05PVE9OSUMsICZ0aW1lMik7CisgCXRkaWZmID0gdGltZV9kaWZmKHRpbWUxLHRpbWUyKTsKKyAJ
cHJpbnRmKCJUaW1lIHRha2VuIHRvIGFwcGx5IGZpbHRlciA9ICVsZCBzZWMgJWxkIG5zZWMgXG5c
biIsIHRkaWZmLnR2X3NlYywgdGRpZmYudHZfbnNlYyk7CisgI2VuZGlmIC8vIFVTRV9DX1BST0ZJ
TElORwogIH0KICAKICB2b2lkIEZFQ29sb3JNYXRyaXg6OmR1bXAoKQpkaWZmIC1yY04gb3JpZ2lu
YWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKKioqIG9yaWdpbmFs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgJMjAxMS0xMS0yNCAxODowMTozNC41MzQ5NTAxNTUgKzAxMDAKLS0tIHdl
YmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAkyMDExLTExLTI0IDE4OjAwOjAzLjY0Njk1MDA5NiAr
MDEwMAoqKioqKioqKioqKioqKioKKioqIDIsNyAqKioqCi0tLSAyLDggLS0tLQogICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1
dGhvcnM6IERhdmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwg
U2luZ2ggPHN1cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8u
dXJsaW5pQHN0LmNvbT4KICAgKgogICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwoqKioqKioqKioqKioqKioKKioq
IDI4LDMzICoqKioKLS0tIDI5LDM5IC0tLS0KICAjaW5jbHVkZSAiRmlsdGVyLmgiCiAgI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAjaW5jbHVkZSA8b2Ns
L29jbEhlbHBlci5oPgorIGV4dGVybiBPQ0xMYXllciBncHU7CisgI2VuZGlmIC8vIEVOQUJMRShP
UEVOQ0wpCisgCiAgbmFtZXNwYWNlIFdlYkNvcmUgewogIAogIGVudW0gQ29sb3JNYXRyaXhUeXBl
IHsKKioqKioqKioqKioqKioqCioqKiA1NSw2MyAqKioqCi0tLSA2MSw3NiAtLS0tCiAgCiAgcHJp
dmF0ZToKICAgICAgRkVDb2xvck1hdHJpeChGaWx0ZXIqLCBDb2xvck1hdHJpeFR5cGUsIGNvbnN0
IFZlY3RvcjxmbG9hdD4mKTsKKyAgICAgfkZFQ29sb3JNYXRyaXgoKTsKICAKICAgICAgQ29sb3JN
YXRyaXhUeXBlIG1fdHlwZTsKICAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKKyAKKyAjaWYg
RU5BQkxFKE9QRU5DTCkKKyAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU9DTChSZWZQdHI8
Qnl0ZUFycmF5PiBwaXhlbEFycmF5KTsKKyAgICAgY2xfcHJvZ3JhbSBtX3Byb2dyYW07CisgICAg
IGNsX2tlcm5lbCBtX2tlcm5lbDsKKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKICB9OwogIAog
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAoqKiogb3JpZ2luYWwv
V2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1ICswMTAw
Ci0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkyMDExLTExLTI0IDE4OjAw
OjAzLjY0Njk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDQsOSAqKioqCi0tLSA0LDEw
IC0tLS0KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0cm9u
aWNzIC0gQXV0aG9yczogRGF2aWQgQ29yaWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1cmlu
ZGVyIFBhbCBTaW5naCA8c3VyaW5kZXItcGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxpbmkg
PGdpdWxpby51cmxpbmlAc3QuY29tPgogICAqCiAgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCioqKioqKioqKioq
KioqKgoqKiogNDcsNTIgKioqKgotLS0gNDgsNjUgLS0tLQogICAgICAsIG1fYmx1ZUZ1bmMoYmx1
ZUZ1bmMpCiAgICAgICwgbV9hbHBoYUZ1bmMoYWxwaGFGdW5jKQogIHsKKyAjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAJZ3B1Lm9wZW5jbFNldHVwUHJvZ3JhbSgmbV9wcm9ncmFtLCAiU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUNvbXBvbmVudFRyYW5z
ZmVyT0NMLmNsIik7CisgCWdwdS5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAmbV9rZXJu
ZWwsICJDb21wb25lbnRUcmFuc2ZlciIpOworICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQorIH0K
KyAKKyBGRUNvbXBvbmVudFRyYW5zZmVyOjp+RkVDb21wb25lbnRUcmFuc2ZlcigpCisgeworICNp
ZiBFTkFCTEUoT1BFTkNMKQorIAlncHUub3BlbmNsQ2xlYW5VcEtlcm5lbCgmbV9rZXJuZWwpOwor
IAlncHUub3BlbmNsQ2xlYW5VcFByb2dyYW0oJm1fcHJvZ3JhbSk7CisgI2VuZGlmIC8vIEVOQUJM
RShPUEVOQ0wpCiAgfQogIAogIFBhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21w
b25lbnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiByZWRGdW5jLCAKKioqKioqKioqKioqKioqCioqKiA5NSwxMDAgKioqKgot
LS0gMTA4LDE3MSAtLS0tCiAgICAgIG1fYWxwaGFGdW5jID0gZnVuYzsKICB9CiAgCisgI2lmIEVO
QUJMRShPUEVOQ0wpCisgaW5saW5lIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseU9DTChCeXRlQXJyYXkqIHBpeGVsQXJyYXksIHVuc2lnbmVkIGNoYXIqKiB0YWJsZXMpCisg
eworIAljbF9tZW0gaW5idWY7CisgCWNsX21lbSBvdXRidWY7CisgCWNsX21lbSByYnVmOworIAlj
bF9tZW0gZ2J1ZjsKKyAJY2xfbWVtIGJidWY7CisgCWNsX21lbSBhYnVmOworIAorIAlib29sIHBy
b2ZpbGVfa2VybmVsID0gdHJ1ZTsKKyAJYm9vbCBwcm9maWxlX2J1ZmZlcl9ydyA9IGZhbHNlOwor
IAlzaXplX3QgbHV0X3NpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcikgKiAyNTY7CisgCXVuc2ln
bmVkIGludCBsZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAJc2l6ZV90IHNpemUgPSBz
aXplb2YodW5zaWduZWQgY2hhcikgKiBsZW5ndGg7CisgCXVuc2lnbmVkIGludCBib3VuZGFyeSA9
IGxlbmd0aCAvIDQ7CisgCXNpemVfdCBjb21wb25lbnRfdHJhbnNmZXJfbG9jYWxfd29ya19zaXpl
WzFdID0gezMyfTsKKyAJc2l6ZV90IGNvbXBvbmVudF90cmFuc2Zlcl9nbG9iYWxfd29ya19zaXpl
WzFdID0gezB9OworIAorIAl3aGlsZShjb21wb25lbnRfdHJhbnNmZXJfZ2xvYmFsX3dvcmtfc2l6
ZVswXSA8IGJvdW5kYXJ5KQorIAl7CisgCQljb21wb25lbnRfdHJhbnNmZXJfZ2xvYmFsX3dvcmtf
c2l6ZVswXSArPSBjb21wb25lbnRfdHJhbnNmZXJfbG9jYWxfd29ya19zaXplWzBdOworIAl9Cisg
CisgCWdwdS5vcGVuY2xDcmVhdGVCdWZmZXIoJmluYnVmLCAgQ0xfTUVNX1JFQURfV1JJVEUsIHNp
emUpOworIAlncHUub3BlbmNsQ3JlYXRlQnVmZmVyKCZvdXRidWYsIENMX01FTV9SRUFEX1dSSVRF
LCBzaXplKTsKKyAJZ3B1Lm9wZW5jbENyZWF0ZUJ1ZmZlcigmcmJ1ZiwgICBDTF9NRU1fUkVBRF9X
UklURSwgbHV0X3NpemUpOworIAlncHUub3BlbmNsQ3JlYXRlQnVmZmVyKCZnYnVmLCAgIENMX01F
TV9SRUFEX1dSSVRFLCBsdXRfc2l6ZSk7CisgCWdwdS5vcGVuY2xDcmVhdGVCdWZmZXIoJmJidWYs
ICAgQ0xfTUVNX1JFQURfV1JJVEUsIGx1dF9zaXplKTsKKyAJZ3B1Lm9wZW5jbENyZWF0ZUJ1ZmZl
cigmYWJ1ZiwgICBDTF9NRU1fUkVBRF9XUklURSwgbHV0X3NpemUpOworIAorIAlncHUub3BlbmNs
V3JpdGVCdWZmZXIoJmluYnVmLCAwLCBzaXplLCAgICAgKHZvaWQqKSBwaXhlbEFycmF5LT5kYXRh
KCksIHByb2ZpbGVfYnVmZmVyX3J3KTsKKyAJZ3B1Lm9wZW5jbFdyaXRlQnVmZmVyKCZyYnVmLCAg
MCwgbHV0X3NpemUsICh2b2lkKikgdGFibGVzWzBdLCAgICAgICAgICBwcm9maWxlX2J1ZmZlcl9y
dyk7CisgCWdwdS5vcGVuY2xXcml0ZUJ1ZmZlcigmZ2J1ZiwgIDAsIGx1dF9zaXplLCAodm9pZCop
IHRhYmxlc1sxXSwgICAgICAgICAgcHJvZmlsZV9idWZmZXJfcncpOworIAlncHUub3BlbmNsV3Jp
dGVCdWZmZXIoJmJidWYsICAwLCBsdXRfc2l6ZSwgKHZvaWQqKSB0YWJsZXNbMl0sICAgICAgICAg
IHByb2ZpbGVfYnVmZmVyX3J3KTsKKyAJZ3B1Lm9wZW5jbFdyaXRlQnVmZmVyKCZhYnVmLCAgMCwg
bHV0X3NpemUsICh2b2lkKikgdGFibGVzWzNdLCAgICAgICAgICBwcm9maWxlX2J1ZmZlcl9ydyk7
CisgCisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAwLCBzaXplb2YoY2xfbWVt
KSwgICAgICAgKHZvaWQqKSAmaW5idWYpOworIAlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tl
cm5lbCwgMSwgc2l6ZW9mKGNsX21lbSksICAgICAgICh2b2lkKikgJm91dGJ1Zik7CisgCWdwdS5v
cGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAyLCBzaXplb2YoY2xfbWVtKSwgICAgICAgKHZv
aWQqKSAmcmJ1Zik7CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAzLCBzaXpl
b2YoY2xfbWVtKSwgICAgICAgKHZvaWQqKSAmZ2J1Zik7CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxB
cmcoJm1fa2VybmVsLCA0LCBzaXplb2YoY2xfbWVtKSwgICAgICAgKHZvaWQqKSAmYmJ1Zik7Cisg
CWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCA1LCBzaXplb2YoY2xfbWVtKSwgICAg
ICAgKHZvaWQqKSAmYWJ1Zik7CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCA2
LCBzaXplb2YodW5zaWduZWQgaW50KSwgKHZvaWQqKSAmYm91bmRhcnkpOworIAorIAlncHUub3Bl
bmNsUnVuS2VybmVsKCZtX2tlcm5lbCwgMSwgTlVMTCwgY29tcG9uZW50X3RyYW5zZmVyX2dsb2Jh
bF93b3JrX3NpemUsIGNvbXBvbmVudF90cmFuc2Zlcl9sb2NhbF93b3JrX3NpemUsIHByb2ZpbGVf
a2VybmVsKTsKKyAKKyAJZ3B1Lm9wZW5jbFJlYWRCdWZmZXIoJm91dGJ1ZiwgMCwgc2l6ZSwgKHZv
aWQqKSBwaXhlbEFycmF5LT5kYXRhKCksIHByb2ZpbGVfYnVmZmVyX3J3KTsKKyAKKyAJZ3B1Lm9w
ZW5jbENsZWFuVXBCdWZmZXIoJmluYnVmKTsKKyAJZ3B1Lm9wZW5jbENsZWFuVXBCdWZmZXIoJm91
dGJ1Zik7CisgCWdwdS5vcGVuY2xDbGVhblVwQnVmZmVyKCZyYnVmKTsKKyAJZ3B1Lm9wZW5jbENs
ZWFuVXBCdWZmZXIoJmdidWYpOworIAlncHUub3BlbmNsQ2xlYW5VcEJ1ZmZlcigmYmJ1Zik7Cisg
CWdwdS5vcGVuY2xDbGVhblVwQnVmZmVyKCZhYnVmKTsKKyB9CisgI2VuZGlmIC8vIEVOQUJMRShP
UEVOQ0wpCisgCiAgc3RhdGljIHZvaWQgaWRlbnRpdHkodW5zaWduZWQgY2hhciosIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQogIHsKICB9CioqKioqKioqKioqKioqKgoqKiogMTUy
LDE1NyAqKioqCi0tLSAyMjMsMjMzIC0tLS0KICAKICB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmFwcGx5KCkKICB7CisgI2lmIFVTRV9DX1BST0ZJTElORworIAlzdHJ1Y3QgdGltZXNwZWMgdGlt
ZTEsIHRpbWUyLCB0ZGlmZjsKKyAKKyAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0
aW1lMSk7CisgI2VuZGlmIC8vIFVTRV9DX1BST0ZJTElORwogICAgICBpZiAoaGFzUmVzdWx0KCkp
CiAgICAgICAgICByZXR1cm47CiAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKioqKioqKioqKioqKioqCioqKiAxNzcsMTgzICoqKioKICAKICAgICAgSW50UmVjdCBkcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwogICAgICBpbi0+Y29weVVubXVsdGlwbGllZEltYWdlKHBpeGVsQXJyYXksIGRy
YXdpbmdSZWN0KTsKISAKICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJy
YXktPmxlbmd0aCgpOwogICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxP
ZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0tLSAy
NTMsMjYxIC0tLS0KICAKICAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICBpbi0+Y29w
eVVubXVsdGlwbGllZEltYWdlKHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0KTsKISAjaWYgRU5BQkxF
KE9QRU5DTCkgJiYgVVNFX09QRU5DTAohICAgICBwbGF0Zm9ybUFwcGx5T0NMKHBpeGVsQXJyYXks
IHRhYmxlcyk7CiEgI2Vsc2UKICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVs
QXJyYXktPmxlbmd0aCgpOwogICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Cioq
KioqKioqKioqKioqKgoqKiogMTg1LDE5MCAqKioqCi0tLSAyNjMsMjc0IC0tLS0KICAgICAgICAg
ICAgICBwaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyBjaGFubmVsLCB0YWJsZXNbY2hhbm5l
bF1bY10pOwogICAgICAgICAgfQogICAgICB9CisgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpICYm
IFVTRV9PUEVOQ0wKKyAjaWYgVVNFX0NfUFJPRklMSU5HCisgCWNsb2NrX2dldHRpbWUoQ0xPQ0tf
TU9OT1RPTklDLCAmdGltZTIpOworIAl0ZGlmZiA9IHRpbWVfZGlmZih0aW1lMSx0aW1lMik7Cisg
CXByaW50ZigiVGltZSB0YWtlbiB0byBhcHBseSBmaWx0ZXIgPSAlbGQgc2VjICVsZCBuc2VjIFxu
XG4iLCB0ZGlmZi50dl9zZWMsIHRkaWZmLnR2X25zZWMpOworICNlbmRpZiAvLyBVU0VfQ19QUk9G
SUxJTkcKICB9CiAgCiAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpkdW1wKCkKZGlmZiAtcmNO
IG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5oCioqKiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCTIwMTEtMTEtMjQgMTg6MDE6
MzQuNTM0OTUwMTU1ICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgJ
MjAxMS0xMS0yNCAxODowMDowMy42NDY5NTAwOTYgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAy
LDcgKioqKgotLS0gMiw4IC0tLS0KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICogQ29weXJpZ2h0IChD
KSAyMDExIFNULU1pY3JvZWxlY3Ryb25pY3MgLSBBdXRob3JzOiBEYXZpZCBDb3JpYXQgPGRhdi5j
b3JpYXRAZ21haWwuY29tPiwgU3VyaW5kZXIgUGFsIFNpbmdoIDxzdXJpbmRlci1wYWwuc2luZ2hA
c3QuY29tPiwgR2l1bGlvIFVybGluaSA8Z2l1bGlvLnVybGluaUBzdC5jb20+CiAgICoKICAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKioqKioqKioqKioqKioqCioqKiAyOCwzMyAqKioqCi0tLSAyOSwzOSAtLS0t
CiAgI2luY2x1ZGUgIkZpbHRlci5oIgogICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAgCisgI2lm
IEVOQUJMRShPUEVOQ0wpCisgI2luY2x1ZGUgPG9jbC9vY2xIZWxwZXIuaD4KKyBleHRlcm4gT0NM
TGF5ZXIgZ3B1OworICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQorIAogIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAKICBlbnVtIENvbXBvbmVudFRyYW5zZmVyVHlwZSB7CioqKioqKioqKioqKioqKgoq
KiogODYsOTYgKioqKgotLS0gOTIsMTA5IC0tLS0KICBwcml2YXRlOgogICAgICBGRUNvbXBvbmVu
dFRyYW5zZmVyKEZpbHRlciosIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVu
YywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICAgfkZF
Q29tcG9uZW50VHJhbnNmZXIoKTsKICAKICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X3JlZEZ1bmM7CiAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ncmVlbkZ1bmM7CiAg
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ibHVlRnVuYzsKICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBtX2FscGhhRnVuYzsKKyAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAg
ICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU9DTChCeXRlQXJyYXkqIHBpeGVsQXJyYXksIHVu
c2lnbmVkIGNoYXIqKiB0YWJsZXMpOworICAgICBjbF9wcm9ncmFtIG1fcHJvZ3JhbTsKKyAgICAg
Y2xfa2VybmVsIG1fa2VybmVsOworICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQogIH07CiAgCiAg
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC1yY04gb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKioqIG9yaWdpbmFsL1dlYktp
dC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAJMjAxMS0xMS0yNCAxODowMTozNC41MzQ5NTAxNTUgKzAxMDAKLS0tIHdl
YmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkyMDExLTExLTI0IDE4OjAwOjAzLjY0Njk1
MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDQsOSAqKioqCi0tLSA0LDEwIC0tLS0KICAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0cm9uaWNzIC0gQXV0
aG9yczogRGF2aWQgQ29yaWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1cmluZGVyIFBhbCBT
aW5naCA8c3VyaW5kZXItcGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxpbmkgPGdpdWxpby51
cmxpbmlAc3QuY29tPgogICAqCiAgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCioqKioqKioqKioqKioqKgoqKiog
NDEsNDYgKioqKgotLS0gNDIsNTkgLS0tLQogICAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hh
bm5lbFNlbGVjdG9yKQogICAgICAsIG1fc2NhbGUoc2NhbGUpCiAgeworICNpZiBFTkFCTEUoT1BF
TkNMKQorIAlncHUub3BlbmNsU2V0dXBQcm9ncmFtKCZtX3Byb2dyYW0sICJTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFRGlzcGxhY2VtZW50TWFw
T0NMLmNsIik7CisgCWdwdS5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAmbV9rZXJuZWws
ICJEaXNwbGFjZW1lbnRNYXAiKTsKKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKKyB9CisgCisg
RkVEaXNwbGFjZW1lbnRNYXA6On5GRURpc3BsYWNlbWVudE1hcCgpCisgeworICNpZiBFTkFCTEUo
T1BFTkNMKQorIAlncHUub3BlbmNsQ2xlYW5VcEtlcm5lbCgmbV9rZXJuZWwpOworIAlncHUub3Bl
bmNsQ2xlYW5VcFByb2dyYW0oJm1fcHJvZ3JhbSk7CisgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wp
CiAgfQogIAogIFBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKKioqKioqKioqKioqKioqCioqKiA4OCw5NSAqKioqCi0tLSAxMDEsMTcwIC0tLS0KICAg
ICAgcmV0dXJuIHRydWU7CiAgfQogIAorICNpZiBFTkFCTEUoT1BFTkNMKQorIGlubGluZSB2b2lk
IEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5T0NMKFJlZlB0cjxCeXRlQXJyYXk+IHNy
Y1BpeGVsQXJyYXlBLAorIAkJCQkJCQkJCQkJCVJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJy
YXlCLAorIAkJCQkJCQkJCQkJCUJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSwKKyAJCQkJCQkJCQkJ
CQlmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSwKKyAJCQkJCQkJCQkJCQlmbG9hdCBzY2FsZUFk
anVzdG1lbnRYLCBmbG9hdCBzY2FsZUFkanVzdG1lbnRZLAorIAkJCQkJCQkJCQkJCUludFNpemUm
IHBhaW50U2l6ZSkKKyB7CisgCWNsX21lbSBpbkFidWY7CisgCWNsX21lbSBpbkJidWY7CisgCWNs
X21lbSBvdXRidWY7CisgCisgCWJvb2wgcHJvZmlsZV9rZXJuZWwgPSB0cnVlOworIAlib29sIHBy
b2ZpbGVfYnVmZmVyX3J3ID0gZmFsc2U7CisgCisgCXVuc2lnbmVkIGludCB3aWR0aCA9IHBhaW50
U2l6ZS53aWR0aCgpOworIAl1bnNpZ25lZCBpbnQgaGVpZ2h0ID0gcGFpbnRTaXplLmhlaWdodCgp
OworIAl1bnNpZ25lZCBpbnQgYm91bmRhcnkgPSB3aWR0aCAqIGhlaWdodDsKKyAJc2l6ZV90IHNp
emUgPSB3aWR0aCAqIGhlaWdodCAqIDQgKiBzaXplb2YodW5zaWduZWQgY2hhcik7CisgCXNpemVf
dCBkaXNwbGFjZW1lbnRfbWFwX2xvY2FsX3dvcmtfc2l6ZVsxXSA9IHsxNn07CisgCXNpemVfdCBk
aXNwbGFjZW1lbnRfbWFwX2dsb2JhbF93b3JrX3NpemVbMV0gPSB7MH07CisgCisgCXdoaWxlKGRp
c3BsYWNlbWVudF9tYXBfZ2xvYmFsX3dvcmtfc2l6ZVswXSA8IGJvdW5kYXJ5KQorIAl7CisgCQlk
aXNwbGFjZW1lbnRfbWFwX2dsb2JhbF93b3JrX3NpemVbMF0gKz0gZGlzcGxhY2VtZW50X21hcF9s
b2NhbF93b3JrX3NpemVbMF07CisgCX0KKyAKKyAJZ3B1Lm9wZW5jbENyZWF0ZUJ1ZmZlcigmaW5B
YnVmLCBDTF9NRU1fUkVBRF9XUklURSwgc2l6ZSk7CisgCWdwdS5vcGVuY2xDcmVhdGVCdWZmZXIo
JmluQmJ1ZiwgQ0xfTUVNX1JFQURfV1JJVEUsIHNpemUpOworIAlncHUub3BlbmNsQ3JlYXRlQnVm
ZmVyKCZvdXRidWYsIENMX01FTV9SRUFEX1dSSVRFLCBzaXplKTsKKyAKKyAJZ3B1Lm9wZW5jbFdy
aXRlQnVmZmVyKCZpbkFidWYsIDAsIHNpemUsICh2b2lkKikgc3JjUGl4ZWxBcnJheUEtPmRhdGEo
KSwgcHJvZmlsZV9idWZmZXJfcncpOworIAlncHUub3BlbmNsV3JpdGVCdWZmZXIoJmluQmJ1Ziwg
MCwgc2l6ZSwgKHZvaWQqKSBzcmNQaXhlbEFycmF5Qi0+ZGF0YSgpLCBwcm9maWxlX2J1ZmZlcl9y
dyk7CisgCisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAwLCAgc2l6ZW9mKGNs
X21lbSksICAgICAgICAgICAgICAgICAgICh2b2lkKikgJmluQWJ1Zik7CisgCWdwdS5vcGVuY2xT
ZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAxLCAgc2l6ZW9mKGNsX21lbSksICAgICAgICAgICAgICAg
ICAgICh2b2lkKikgJmluQmJ1Zik7CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVs
LCAyLCAgc2l6ZW9mKGNsX21lbSksICAgICAgICAgICAgICAgICAgICh2b2lkKikgJm91dGJ1Zik7
CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAzLCAgc2l6ZW9mKGZsb2F0KSwg
ICAgICAgICAgICAgICAgICAgICh2b2lkKikgJnNjYWxlWCk7CisgCWdwdS5vcGVuY2xTZXRLZXJu
ZWxBcmcoJm1fa2VybmVsLCA0LCAgc2l6ZW9mKGZsb2F0KSwgICAgICAgICAgICAgICAgICAgICh2
b2lkKikgJnNjYWxlWSk7CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCA1LCAg
c2l6ZW9mKGZsb2F0KSwgICAgICAgICAgICAgICAgICAgICh2b2lkKikgJnNjYWxlQWRqdXN0bWVu
dFgpOworIAlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgNiwgIHNpemVvZihmbG9h
dCksICAgICAgICAgICAgICAgICAgICAodm9pZCopICZzY2FsZUFkanVzdG1lbnRZKTsKKyAJZ3B1
Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWwsIDcsICBzaXplb2YoZW51bSBDaGFubmVsU2Vs
ZWN0b3JUeXBlKSwgKHZvaWQqKSAmbV94Q2hhbm5lbFNlbGVjdG9yKTsKKyAJZ3B1Lm9wZW5jbFNl
dEtlcm5lbEFyZygmbV9rZXJuZWwsIDgsICBzaXplb2YoZW51bSBDaGFubmVsU2VsZWN0b3JUeXBl
KSwgKHZvaWQqKSAmbV95Q2hhbm5lbFNlbGVjdG9yKTsKKyAJZ3B1Lm9wZW5jbFNldEtlcm5lbEFy
ZygmbV9rZXJuZWwsIDksICBzaXplb2YodW5zaWduZWQgaW50KSwgICAgICAgICAgICAgKHZvaWQq
KSAmd2lkdGgpOworIAlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgMTAsIHNpemVv
Zih1bnNpZ25lZCBpbnQpLCAgICAgICAgICAgICAodm9pZCopICZoZWlnaHQpOworIAlncHUub3Bl
bmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgMTEsIHNpemVvZih1bnNpZ25lZCBpbnQpLCAgICAg
ICAgICAgICAodm9pZCopICZib3VuZGFyeSk7CisgCisgCWdwdS5vcGVuY2xSdW5LZXJuZWwoJm1f
a2VybmVsLCAxLCBOVUxMLCBkaXNwbGFjZW1lbnRfbWFwX2dsb2JhbF93b3JrX3NpemUsIGRpc3Bs
YWNlbWVudF9tYXBfbG9jYWxfd29ya19zaXplLCBwcm9maWxlX2tlcm5lbCk7CisgCisgCWdwdS5v
cGVuY2xSZWFkQnVmZmVyKCZvdXRidWYsIDAsIHNpemUsICh2b2lkKikgZHN0UGl4ZWxBcnJheS0+
ZGF0YSgpLCBwcm9maWxlX2J1ZmZlcl9ydyk7CisgCisgCWdwdS5vcGVuY2xDbGVhblVwQnVmZmVy
KCZpbkFidWYpOworIAlncHUub3BlbmNsQ2xlYW5VcEJ1ZmZlcigmaW5CYnVmKTsKKyAJZ3B1Lm9w
ZW5jbENsZWFuVXBCdWZmZXIoJm91dGJ1Zik7CisgfQorICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNM
KQorIAogIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkKICB7CisgI2lmIFVTRV9DX1BS
T0ZJTElORworIAlzdHJ1Y3QgdGltZXNwZWMgdGltZTEsIHRpbWUyLCB0ZGlmZjsKKyAKKyAJY2xv
Y2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0aW1lMSk7CisgI2VuZGlmIC8vIFVTRV9DX1BS
T0ZJTElORwogICAgICBpZiAoaGFzUmVzdWx0KCkpCiAgICAgICAgICByZXR1cm47CiAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKioqKioqKioqKioqKioqCioqKiAxMjAs
MTI1ICoqKioKLS0tIDE5NSwyMDMgLS0tLQogICAgICBmbG9hdCBzY2FsZVkgPSBmaWx0ZXItPmFw
cGx5VmVydGljYWxTY2FsZShtX3NjYWxlIC8gMjU1KTsKICAgICAgZmxvYXQgc2NhbGVBZGp1c3Rt
ZW50WCA9IGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUoMC41ZiAtIDAuNWYgKiBtX3NjYWxl
KTsKICAgICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WSA9IGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNj
YWxlKDAuNWYgLSAwLjVmICogbV9zY2FsZSk7CisgI2lmIEVOQUJMRShPUEVOQ0wpICYmIFVTRV9P
UEVOQ0wKKyAgICAgcGxhdGZvcm1BcHBseU9DTChzcmNQaXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJh
eUIsIGRzdFBpeGVsQXJyYXksIHNjYWxlWCwgc2NhbGVZLCBzY2FsZUFkanVzdG1lbnRYLCBzY2Fs
ZUFkanVzdG1lbnRZLCBwYWludFNpemUpOworICNlbHNlCiAgICAgIGludCBzdHJpZGUgPSBwYWlu
dFNpemUud2lkdGgoKSAqIDQ7CiAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhl
aWdodCgpOyArK3kpIHsKICAgICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZTsKKioqKioqKioq
KioqKioqCioqKiAxMzcsMTQyICoqKioKLS0tIDIxNSwyMjYgLS0tLQogICAgICAgICAgICAgIH0K
ICAgICAgICAgIH0KICAgICAgfQorICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKSAmJiBVU0VfT1BF
TkNMCisgI2lmIFVTRV9DX1BST0ZJTElORworIAljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05J
QywgJnRpbWUyKTsKKyAJdGRpZmYgPSB0aW1lX2RpZmYodGltZTEsdGltZTIpOworIAlwcmludGYo
IlRpbWUgdGFrZW4gdG8gYXBwbHkgZmlsdGVyID0gJWxkIHNlYyAlbGQgbnNlYyBcblxuIiwgdGRp
ZmYudHZfc2VjLCB0ZGlmZi50dl9uc2VjKTsKKyAjZW5kaWYgLy8gVVNFX0NfUFJPRklMSU5HCiAg
fQogIAogIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmR1bXAoKQpkaWZmIC1yY04gb3JpZ2luYWwv
V2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmggd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAoqKiogb3Jp
Z2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJMjAxMS0xMS0yNCAxODowMTozNC41MzQ5NTAxNTUgKzAx
MDAKLS0tIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJMjAxMS0xMS0yNCAxODowMDow
My42NDY5NTAwOTYgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAyLDcgKioqKgotLS0gMiw4IC0t
LS0KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1pY3JvZWxl
Y3Ryb25pY3MgLSBBdXRob3JzOiBEYXZpZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwuY29tPiwg
U3VyaW5kZXIgUGFsIFNpbmdoIDxzdXJpbmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1bGlvIFVy
bGluaSA8Z2l1bGlvLnVybGluaUBzdC5jb20+CiAgICoKICAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKioqKioq
KioqKioqKioqCioqKiAyNywzMiAqKioqCi0tLSAyOCwzOCAtLS0tCiAgI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgogICNpbmNsdWRlICJGaWx0ZXIuaCIKICAKKyAjaWYgRU5BQkxFKE9QRU5DTCkK
KyAjaW5jbHVkZSA8b2NsL29jbEhlbHBlci5oPgorIGV4dGVybiBPQ0xMYXllciBncHU7CisgI2Vu
ZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisgCiAgbmFtZXNwYWNlIFdlYkNvcmUgewogIAogIGVudW0g
Q2hhbm5lbFNlbGVjdG9yVHlwZSB7CioqKioqKioqKioqKioqKgoqKiogNTksNjggKioqKgotLS0g
NjUsODYgLS0tLQogIAogIHByaXZhdGU6CiAgICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlcios
IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgIH5GRURpc3BsYWNlbWVudE1hcCgpOwog
IAogICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICAgQ2hh
bm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CiAgICAgIGZsb2F0IG1fc2NhbGU7
CisgCisgI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlP
Q0woUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheUEsCisgICAgIAkJCQkJCQkgUmVmUHRy
PEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheUIsCisgICAgIAkJCQkJCQkgQnl0ZUFycmF5KiBkc3RQ
aXhlbEFycmF5LAorICAgICAJCQkJCQkJIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZLAorICAg
ICAJCQkJCQkJIGZsb2F0IHNjYWxlQWRqdXN0bWVudFgsIGZsb2F0IHNjYWxlQWRqdXN0bWVudFks
CisgICAgIAkJCQkJCQkgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICAgY2xfcHJvZ3JhbSBtX3By
b2dyYW07CisgICAgIGNsX2tlcm5lbCBtX2tlcm5lbDsKKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5D
TCkKICB9OwogIAogIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtcmNOIG9yaWdpbmFsL1dl
YktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAoqKiogb3JpZ2luYWwvV2ViS2l0
LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCTIwMTEtMTEtMjQgMTg6MDE6MzQuNTM0OTUwMTU1ICswMTAwCi0tLSB3ZWJraXRfb3Bl
bmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAkyMDExLTExLTI0IDE4OjAwOjAzLjY0Njk1MDA5NiArMDEwMAoqKioq
KioqKioqKioqKioKKioqIDEsNiAqKioqCi0tLSAxLDcgLS0tLQogIC8qCiAgICogQ29weXJpZ2h0
IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgICogQ29weXJpZ2h0IChDKSAyMDEwIFpv
bHRhbiBIZXJjemVnCisgICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1pY3JvZWxlY3Ryb25pY3Mg
LSBBdXRob3JzOiBEYXZpZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwuY29tPiwgU3VyaW5kZXIg
UGFsIFNpbmdoIDxzdXJpbmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1bGlvIFVybGluaSA8Z2l1
bGlvLnVybGluaUBzdC5jb20+CiAgICoKICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKioq
KioqKioqKioqKioqCioqKiA0OCw1MyAqKioqCi0tLSA0OSw5NSAtLS0tCiAgICAgICwgbV9rZXJu
ZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAgLCBtX2tlcm5lbFVuaXRMZW5n
dGhZKGtlcm5lbFVuaXRMZW5ndGhZKQogIHsKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAJZ3B1Lm9w
ZW5jbFNldHVwUHJvZ3JhbSgmbV9wcm9ncmFtLCAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUxpZ2h0aW5nT0NMLmNsIik7CisgCWlmKG1fbGln
aHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKKyAJeworIAkJaWYobV9s
aWdodFNvdXJjZS0+dHlwZSgpID09IExTX1BPSU5UKQorIAkJeworIAkJCWdwdS5vcGVuY2xTZXR1
cEtlcm5lbCgmbV9wcm9ncmFtLCAmbV9rZXJuZWwsICJEaWZmdXNlTGlnaHRpbmdQb2ludExpZ2h0
Iik7CisgCQl9CisgCQllbHNlIGlmKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9PSBMU19ESVNUQU5U
KQorIAkJeworIAkJCWdwdS5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAmbV9rZXJuZWws
ICJEaWZmdXNlTGlnaHRpbmdEaXN0YW50TGlnaHQiKTsKKyAJCX0KKyAJCWVsc2UKKyAJCXsKKyAJ
CQlncHUub3BlbmNsU2V0dXBLZXJuZWwoJm1fcHJvZ3JhbSwgJm1fa2VybmVsLCAiRGlmZnVzZUxp
Z2h0aW5nU3BvdExpZ2h0Iik7CisgCQl9CisgCX0KKyAJZWxzZQorIAl7CisgCQlpZihtX2xpZ2h0
U291cmNlLT50eXBlKCkgPT0gTFNfUE9JTlQpCisgCQl7CisgCQkJZ3B1Lm9wZW5jbFNldHVwS2Vy
bmVsKCZtX3Byb2dyYW0sICZtX2tlcm5lbCwgIlNwZWN1bGFyTGlnaHRpbmdQb2ludExpZ2h0Iik7
CisgCQl9CisgCQllbHNlIGlmKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9PSBMU19ESVNUQU5UKQor
IAkJeworIAkJCWdwdS5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFtLCAmbV9rZXJuZWwsICJT
cGVjdWxhckxpZ2h0aW5nRGlzdGFudExpZ2h0Iik7CisgCQl9CisgCQllbHNlCisgCQl7CisgCQkJ
Z3B1Lm9wZW5jbFNldHVwS2VybmVsKCZtX3Byb2dyYW0sICZtX2tlcm5lbCwgIlNwZWN1bGFyTGln
aHRpbmdTcG90TGlnaHQiKTsKKyAJCX0KKyAJfQorICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQor
IH0KKyAKKyBGRUxpZ2h0aW5nOjp+RkVMaWdodGluZygpCisgeworICNpZiBFTkFCTEUoT1BFTkNM
KQorIAlncHUub3BlbmNsQ2xlYW5VcEtlcm5lbCgmbV9rZXJuZWwpOworIAlncHUub3BlbmNsQ2xl
YW5VcFByb2dyYW0oJm1fcHJvZ3JhbSk7CisgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCiAgfQog
IAogIGNvbnN0IHN0YXRpYyBpbnQgY1BpeGVsU2l6ZSA9IDQ7CioqKioqKioqKioqKioqKgoqKiog
MTc3LDE4MyAqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50UG9p
bnQmIG5vcm1hbDJEVmVjdG9yKQogIHsKICAgICAgbV9saWdodFNvdXJjZS0+dXBkYXRlUGFpbnRp
bmdEYXRhKHBhaW50aW5nRGF0YSwgbGlnaHRYLCBsaWdodFksIHN0YXRpY19jYXN0PGZsb2F0Pihk
YXRhLnBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKSAqIGRhdGEuc3Vy
ZmFjZVNjYWxlKTsKLSAKICAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKICAgICAgaWYgKCFub3Jt
YWwyRFZlY3Rvci54KCkgJiYgIW5vcm1hbDJEVmVjdG9yLnkoKSkgewogICAgICAgICAgLy8gTm9y
bWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgot
LS0gMjE5LDIyNCAtLS0tCioqKioqKioqKioqKioqKgoqKiogMjMyLDIzOCAqKioqCiAgewogICAg
ICBJbnRQb2ludCBub3JtYWxWZWN0b3I7CiAgICAgIGludCBvZmZzZXQgPSAwOwotIAogICAgICBm
b3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CiAgICAgICAgICBvZmZzZXQgPSB5
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CiAgICAgICAg
ICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZz
ZXQgKz0gY1BpeGVsU2l6ZSkgewotLS0gMjczLDI3OCAtLS0tCioqKioqKioqKioqKioqKgoqKiog
MjgyLDI5MSAqKioqCiAgICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRp
bmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKICB9CiAgCiAgaW5saW5lIHZv
aWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICB7CiAgICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCiEgI2lmIENQVShBUk1fTkVPTikgJiYgQ09NUElMRVIoR0NDKQogICAgICBwbGF0Zm9y
bUFwcGx5TmVvbihkYXRhLCBwYWludGluZ0RhdGEpOwogICNlbHNlCiAgICAgIHBsYXRmb3JtQXBw
bHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0tLSAzMjIsNDM1IC0tLS0KICAgICAgcGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUpOwogIH0KICAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAKKyB0eXBlZGVm
IHN0cnVjdAorIHsKKyAJZmxvYXQgeDsKKyAJZmxvYXQgeTsKKyAJZmxvYXQgejsKKyB9TXlGbG9h
dFBvaW50M0Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QKKyB7CisgCU15RmxvYXRQb2ludDNEIGxpZ2h0
VmVjdG9yOworIAlNeUZsb2F0UG9pbnQzRCBjb2xvclZlY3RvcjsKKyAJZmxvYXQgbGlnaHRWZWN0
b3JMZW5ndGg7CisgCU15RmxvYXRQb2ludDNEIGxpZ2h0U291cmNlUG9zaXRpb247CisgCU15Rmxv
YXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKKyAJTXlGbG9hdFBvaW50M0QgcHJpdmF0ZUNvbG9y
VmVjdG9yOworIAlmbG9hdCBjb25lQ3V0T2ZmTGltaXQ7CisgCWZsb2F0IGNvbmVGdWxsTGlnaHQ7
CisgCWludCBzcGVjdWxhckV4cG9uZW50OworIH1QYWludGluZ0RhdGFPQ0w7CisgCisgaW5saW5l
IHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU9DTChMaWdodGluZ0RhdGEmIGRhdGEsIExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKKyB7CisgCXVuc2lnbmVkIGlu
dCB3aWR0aCA9IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSArIDE7CisgCXVuc2lnbmVkIGludCBo
ZWlnaHQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICsgMTsKKyAJLy9zaXplX3Qgb2Zmc2V0
c19zaXplID0gc2l6ZW9mKGludCkgKiAoaGVpZ2h0IC0gMikgKiAod2lkdGggLSAyKTsKKyAJLy9z
aXplX3QgcGFpbnRpbmdEYXRhc19zaXplID0gc2l6ZW9mKFBhaW50aW5nRGF0YU9DTCkgKiAoaGVp
Z2h0IC0gMikgKiAod2lkdGggLSAyKTsKKyAJc2l6ZV90IGRhdGFfc2l6ZSA9IHdpZHRoICogaGVp
Z2h0ICogNCAqIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKKyAKKyAJUGFpbnRpbmdEYXRhT0NMIHBh
aW50aW5nX2RhdGE7CisgCXBhaW50aW5nX2RhdGEubGlnaHRWZWN0b3IueCAgICAgICAgPSBwYWlu
dGluZ0RhdGEubGlnaHRWZWN0b3IueCgpOworIAlwYWludGluZ19kYXRhLmxpZ2h0VmVjdG9yLnkg
ICAgICAgID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnkoKTsKKyAJcGFpbnRpbmdfZGF0YS5s
aWdodFZlY3Rvci56ICAgICAgICA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56KCk7CisgCXBh
aW50aW5nX2RhdGEuY29sb3JWZWN0b3IueCAgICAgICAgPSBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3IueCgpOworIAlwYWludGluZ19kYXRhLmNvbG9yVmVjdG9yLnkgICAgICAgID0gcGFpbnRpbmdE
YXRhLmNvbG9yVmVjdG9yLnkoKTsKKyAJcGFpbnRpbmdfZGF0YS5jb2xvclZlY3Rvci56ICAgICAg
ICA9IHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56KCk7CisgCXBhaW50aW5nX2RhdGEubGlnaHRW
ZWN0b3JMZW5ndGggICAgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgCXBhaW50
aW5nX2RhdGEuZGlyZWN0aW9uVmVjdG9yLnggICAgPSBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVj
dG9yLngoKTsKKyAJcGFpbnRpbmdfZGF0YS5kaXJlY3Rpb25WZWN0b3IueSAgICA9IHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3IueSgpOworIAlwYWludGluZ19kYXRhLmRpcmVjdGlvblZlY3Rv
ci56ICAgID0gcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci56KCk7CisgCXBhaW50aW5nX2Rh
dGEucHJpdmF0ZUNvbG9yVmVjdG9yLnggPSBwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9y
LngoKTsKKyAJcGFpbnRpbmdfZGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueSA9IHBhaW50aW5nRGF0
YS5wcml2YXRlQ29sb3JWZWN0b3IueSgpOworIAlwYWludGluZ19kYXRhLnByaXZhdGVDb2xvclZl
Y3Rvci56ID0gcGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci56KCk7CisgCXBhaW50aW5n
X2RhdGEuY29uZUN1dE9mZkxpbWl0ICAgICAgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0
OworIAlwYWludGluZ19kYXRhLmNvbmVGdWxsTGlnaHQgICAgICAgID0gcGFpbnRpbmdEYXRhLmNv
bmVGdWxsTGlnaHQ7CisgCXBhaW50aW5nX2RhdGEuc3BlY3VsYXJFeHBvbmVudCAgICAgPSBwYWlu
dGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudDsKKyAJaWYobV9saWdodFNvdXJjZS0+dHlwZSgpID09
IExTX1BPSU5UKQorIAl7CisgCQlQb2ludExpZ2h0U291cmNlKiBwb2ludExpZ2h0U291cmNlID0g
c3RhdGljX2Nhc3Q8UG9pbnRMaWdodFNvdXJjZSo+KG1fbGlnaHRTb3VyY2UuZ2V0KCkpOworIAkJ
cGFpbnRpbmdfZGF0YS5saWdodFNvdXJjZVBvc2l0aW9uLnggPSBwb2ludExpZ2h0U291cmNlLT5w
b3NpdGlvbigpLngoKTsKKyAJCXBhaW50aW5nX2RhdGEubGlnaHRTb3VyY2VQb3NpdGlvbi55ID0g
cG9pbnRMaWdodFNvdXJjZS0+cG9zaXRpb24oKS55KCk7CisgCQlwYWludGluZ19kYXRhLmxpZ2h0
U291cmNlUG9zaXRpb24ueiA9IHBvaW50TGlnaHRTb3VyY2UtPnBvc2l0aW9uKCkueigpOworIAl9
CisgCWVsc2UgaWYobV9saWdodFNvdXJjZS0+dHlwZSgpID09IExTX1NQT1QpCisgCXsKKyAJCVNw
b3RMaWdodFNvdXJjZSogc3BvdExpZ2h0U291cmNlID0gc3RhdGljX2Nhc3Q8U3BvdExpZ2h0U291
cmNlKj4obV9saWdodFNvdXJjZS5nZXQoKSk7CisgCQlwYWludGluZ19kYXRhLmxpZ2h0U291cmNl
UG9zaXRpb24ueCA9IHNwb3RMaWdodFNvdXJjZS0+cG9zaXRpb24oKS54KCk7CisgCQlwYWludGlu
Z19kYXRhLmxpZ2h0U291cmNlUG9zaXRpb24ueSA9IHNwb3RMaWdodFNvdXJjZS0+cG9zaXRpb24o
KS55KCk7CisgCQlwYWludGluZ19kYXRhLmxpZ2h0U291cmNlUG9zaXRpb24ueiA9IHNwb3RMaWdo
dFNvdXJjZS0+cG9zaXRpb24oKS56KCk7CisgCX0KKyAKKyAJY2xfbWVtIHdya2J1ZjsKKyAKKyAJ
Ym9vbCBwcm9maWxlX2tlcm5lbCA9IHRydWU7CisgCWJvb2wgcHJvZmlsZV9idWZmZXJfcncgPSBm
YWxzZTsKKyAJdW5zaWduZWQgaW50IGJvdW5kYXJ5ID0gKHdpZHRoIC0gMikgKiAoaGVpZ2h0IC0g
Mik7CisgCXNpemVfdCBsaWdodGluZ19sb2NhbF93b3JrX3NpemVbMV0gPSB7MTZ9OworIAlzaXpl
X3QgbGlnaHRpbmdfZ2xvYmFsX3dvcmtfc2l6ZVsxXSA9IHswfTsKKyAKKyAJd2hpbGUobGlnaHRp
bmdfZ2xvYmFsX3dvcmtfc2l6ZVswXSA8IGJvdW5kYXJ5KQorIAl7CisgCQlsaWdodGluZ19nbG9i
YWxfd29ya19zaXplWzBdICs9IGxpZ2h0aW5nX2xvY2FsX3dvcmtfc2l6ZVswXTsKKyAJfQorIAor
IAlncHUub3BlbmNsQ3JlYXRlQnVmZmVyKCZ3cmtidWYsICAgICAgICAgICAgQ0xfTUVNX1JFQURf
V1JJVEUsIGRhdGFfc2l6ZSk7CisgCisgCWdwdS5vcGVuY2xXcml0ZUJ1ZmZlcigmd3JrYnVmLCAg
ICAgICAgICAgIDAsIGRhdGFfc2l6ZSwgICAgICAgICAgKHZvaWQqKSBkYXRhLnBpeGVscy0+ZGF0
YSgpLCBwcm9maWxlX2J1ZmZlcl9ydyk7CisgCisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1f
a2VybmVsLCAwLCAgc2l6ZW9mKGNsX21lbSksICAgICAgICAgICh2b2lkKikgJndya2J1Zik7Cisg
CWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAxLCAgc2l6ZW9mKFBhaW50aW5nRGF0
YU9DTCksICh2b2lkKikgJnBhaW50aW5nX2RhdGEpOworIAlncHUub3BlbmNsU2V0S2VybmVsQXJn
KCZtX2tlcm5lbCwgMiwgIHNpemVvZihpbnQpLCAgICAgICAgICAgICAodm9pZCopICZ3aWR0aCk7
CisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAzLCAgc2l6ZW9mKGZsb2F0KSwg
ICAgICAgICAgICh2b2lkKikgJmRhdGEuc3VyZmFjZVNjYWxlKTsKKyAJZ3B1Lm9wZW5jbFNldEtl
cm5lbEFyZygmbV9rZXJuZWwsIDQsICBzaXplb2YodW5zaWduZWQgaW50KSwgICAgKHZvaWQqKSAm
Ym91bmRhcnkpOworIAlpZihtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGln
aHRpbmcpCisgCXsKKyAJCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCA1LCAgc2l6
ZW9mKGZsb2F0KSwgKHZvaWQqKSAmbV9kaWZmdXNlQ29uc3RhbnQpOworIAl9CisgCWVsc2UKKyAJ
eworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWwsIDUsICBzaXplb2YoZmxvYXQp
LCAodm9pZCopICZtX3NwZWN1bGFyQ29uc3RhbnQpOworIAkJZ3B1Lm9wZW5jbFNldEtlcm5lbEFy
ZygmbV9rZXJuZWwsIDYsICBzaXplb2YoZmxvYXQpLCAodm9pZCopICZtX3NwZWN1bGFyRXhwb25l
bnQpOworIAl9CisgCisgCWdwdS5vcGVuY2xSdW5LZXJuZWwoJm1fa2VybmVsLCAxLCBOVUxMLCBs
aWdodGluZ19nbG9iYWxfd29ya19zaXplLCBsaWdodGluZ19sb2NhbF93b3JrX3NpemUsIHByb2Zp
bGVfa2VybmVsKTsKKyAKKyAJZ3B1Lm9wZW5jbFJlYWRCdWZmZXIoJndya2J1ZiwgMCwgZGF0YV9z
aXplLCAodm9pZCopIGRhdGEucGl4ZWxzLT5kYXRhKCksIHByb2ZpbGVfYnVmZmVyX3J3KTsKKyAK
KyAJZ3B1Lm9wZW5jbENsZWFuVXBCdWZmZXIoJndya2J1Zik7CisgfQorICNlbmRpZiAvLyBFTkFC
TEUoT1BFTkNMKQorIAogIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkoTGln
aHRpbmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEp
CiAgewogICAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVu
IGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgohICNpZiBFTkFCTEUoT1BFTkNMKSAmJiBV
U0VfT1BFTkNMCiEgICAgIHBsYXRmb3JtQXBwbHlPQ0woZGF0YSwgcGFpbnRpbmdEYXRhKTsKISAj
ZWxpZiBDUFUoQVJNX05FT04pICYmIENPTVBJTEVSKEdDQykKICAgICAgcGxhdGZvcm1BcHBseU5l
b24oZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAjZWxzZQogICAgICBwbGF0Zm9ybUFwcGx5R2VuZXJp
YyhkYXRhLCBwYWludGluZ0RhdGEpOwoqKioqKioqKioqKioqKioKKioqIDM4OCwzOTMgKioqKgot
LS0gNTMyLDU0MiAtLS0tCiAgCiAgdm9pZCBGRUxpZ2h0aW5nOjphcHBseSgpCiAgeworICNpZiBV
U0VfQ19QUk9GSUxJTkcKKyAJc3RydWN0IHRpbWVzcGVjIHRpbWUxLCB0aW1lMiwgdGRpZmY7Cisg
CisgCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdGltZTEpOworICNlbmRpZiAvLyBV
U0VfQ19QUk9GSUxJTkcKICAgICAgaWYgKGhhc1Jlc3VsdCgpKQogICAgICAgICAgcmV0dXJuOwog
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CioqKioqKioqKioqKioqKgoq
KiogNDExLDQxNiAqKioqCi0tLSA1NjAsNTcwIC0tLS0KICAKICAgICAgSW50U2l6ZSBhYnNvbHV0
ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgICBkcmF3TGlnaHRp
bmcoc3JjUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWlu
dFNpemUuaGVpZ2h0KCkpOworICNpZiBVU0VfQ19QUk9GSUxJTkcKKyAJY2xvY2tfZ2V0dGltZShD
TE9DS19NT05PVE9OSUMsICZ0aW1lMik7CisgCXRkaWZmID0gdGltZV9kaWZmKHRpbWUxLHRpbWUy
KTsKKyAJcHJpbnRmKCJUaW1lIHRha2VuIHRvIGFwcGx5IGZpbHRlciA9ICVsZCBzZWMgJWxkIG5z
ZWMgXG5cbiIsIHRkaWZmLnR2X3NlYywgdGRpZmYudHZfbnNlYyk7CisgI2VuZGlmIC8vIFVTRV9D
X1BST0ZJTElORwogIH0KICAKICB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLXJjTiBvcmln
aW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAoqKiogb3JpZ2luYWwvV2Vi
S2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAkyMDExLTExLTI0IDE4OjAxOjM0LjUzNDk1MDE1NSArMDEwMAotLS0gd2Via2l0X29w
ZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oCTIwMTEtMTEtMjQgMTg6MDA6MDMuNjQ2OTUwMDk2ICswMTAwCioqKioq
KioqKioqKioqKgoqKiogMSw2ICoqKioKLS0tIDEsNyAtLS0tCiAgLyoKICAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcKKyAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAt
IEF1dGhvcnM6IERhdmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQ
YWwgU2luZ2ggPHN1cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVs
aW8udXJsaW5pQHN0LmNvbT4KICAgKgogICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwoqKioq
KioqKioqKioqKioKKioqIDM3LDQyICoqKioKLS0tIDM4LDQ4IC0tLS0KICAjaW5jbHVkZSA8d3Rm
L0J5dGVBcnJheS5oPgogICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICAKKyAjaWYgRU5BQkxF
KE9QRU5DTCkKKyAjaW5jbHVkZSA8b2NsL29jbEhlbHBlci5oPgorIGV4dGVybiBPQ0xMYXllciBn
cHU7CisgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisgCiAgLy8gQ29tbW9uIGJhc2UgY2xhc3Mg
Zm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNwZWN1bGFyTGlnaHRpbmcKICAKICBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CioqKioqKioqKioqKioqKgoqKiogOTQsMTAwICoqKioKLS0tIDEwMCwxMTMg
LS0tLQogICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5n
UGFpbnRpbmdEYXRhRm9yTmVvbiopOwogICNlbmRpZgogIAorICNpZiBFTkFCTEUoT1BFTkNMKQor
ICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5T0NMKExpZ2h0aW5nRGF0YSYsIExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmKTsKKyAgICAgY2xfcHJvZ3JhbSBtX3Byb2dyYW07CisgICAgIGNs
X2tlcm5lbCBtX2tlcm5lbDsKKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKKyAKICAgICAgRkVM
aWdodGluZyhGaWx0ZXIqLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwor
ICAgICB+RkVMaWdodGluZygpOwogIAogICAgICBib29sIGRyYXdMaWdodGluZyhCeXRlQXJyYXkq
LCBpbnQsIGludCk7CiAgICAgIGlubGluZSB2b2lkIGlubGluZVNldFBpeGVsKGludCBvZmZzZXQs
IExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLApkaWZmIC1yY04gb3Jp
Z2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAgd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAoqKiogb3Jp
Z2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAJMjAxMS0xMS0yNCAxODowMTozNC41MzQ5NTAxNTUgKzAxMDAK
LS0tIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJMjAxMS0xMS0yNCAxODowMDowMy42NDY5
NTAwOTYgKzAxMDAKKioqKioqKioqKioqKioqCioqKiA0LDkgKioqKgotLS0gNCwxMCAtLS0tCiAg
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1
dGhvcnM6IERhdmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwg
U2luZ2ggPHN1cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8u
dXJsaW5pQHN0LmNvbT4KICAgKgogICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwoqKioqKioqKioqKioqKioKKioq
IDMzLDUxICoqKioKLS0tIDM0LDc1IC0tLS0KICAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgog
ICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAgI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyAvLyNkZWZpbmUgRFVNUF9EQVRBCiAgCiAgdXNpbmcgc3RkOjptaW47CiAgdXNpbmcgc3RkOjpt
YXg7CiAgCiAgbmFtZXNwYWNlIFdlYkNvcmUgewogIAorICNkZWZpbmUgTUFYX0hPUklaT05UQUxf
QlVGRkVSX1NJWkUgMTAKKyAjZGVmaW5lIE5VTV9LRVJORUxTIDIwMAorICNkZWZpbmUgTE9DQUxf
V09SS19TSVpFIDIwMAorIAogIEZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KEZpbHRlciogZmls
dGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpCiAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAgLCBtX3R5cGUodHlwZSkK
ICAgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKICAgICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKICB7
CisgI2lmIEVOQUJMRShPUEVOQ0wpCisgCWNoYXIgY29tcGlsZU9wdGlvbnNbMjA0OF07CisgCXNw
cmludGYoY29tcGlsZU9wdGlvbnMsICItRCBOVU1fS0VSTkVMUz0ldSAtRCBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREU9JXUgLUQgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT0ldSAtRCBN
QVhfSE9SSVpPTlRBTF9CVUZGRVJfU0laRT0ldSIsTlVNX0tFUk5FTFMsIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSwgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSwgTUFYX0hPUklaT05U
QUxfQlVGRkVSX1NJWkUpOworIAorIAlncHUub3BlbmNsU2V0dXBQcm9ncmFtKCZtX3Byb2dyYW0s
IAorIAkgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFTW9ycGhvbG9neS5jbCIsCisgCQkJCQkJCQkJCQkJ
IGNvbXBpbGVPcHRpb25zKTsKKyAJZ3B1Lm9wZW5jbFNldHVwS2VybmVsKCZtX3Byb2dyYW0sICZt
X2tlcm5lbCwgIk1vcnBoUmVnaW9uQXBwbHkiKTsKKyAvLwlncHUub3BlbmNsUGxhdGZvcm1DYXBh
YmlsaXRpZXNRdWVyeSgpOworICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQorIH0KKyAKKyAjaWYg
RU5BQkxFKE9QRU5DTCkKKyBGRU1vcnBob2xvZ3k6On5GRU1vcnBob2xvZ3koKQorIHsKKyAJZ3B1
Lm9wZW5jbENsZWFuVXBLZXJuZWwoJm1fa2VybmVsKTsKKyAJZ3B1Lm9wZW5jbENsZWFuVXBQcm9n
cmFtKCZtX3Byb2dyYW0pOwogIH0KKyAjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKICAKICBQYXNz
UmVmUHRyPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSkKICB7CioqKioqKioqKioqKioqKgoqKiogMTg5LDIwMCAqKioqCi0tLSAyMjQsMjQ2IC0tLS0K
ICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKICAgICAgfQogICNl
bmRpZgorIAorICNpZiBFTkFCTEUoT1BFTkNMKSAmJiBVU0VfT1BFTkNMCisgCQlwbGF0Zm9ybUFw
cGx5T0NMKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLT5oZWlnaHQpOworICNlbHNlCiAg
ICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLT5o
ZWlnaHQpOworICNlbmRpZgogIH0KICAKICAKICB2b2lkIEZFTW9ycGhvbG9neTo6YXBwbHkoKQog
IHsKKyAjaWZkZWYgVVNFX0NfUFJPRklMSU5HCisgCXN0cnVjdCB0aW1lc3BlYyB0aW1lMSwgdGlt
ZTIsIHRkaWZmOworIAorIAljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRpbWUxKTsK
KyAjZW5kaWYgLy8gVVNFX0NfUFJPRklMSU5HCisgCQlmcHJpbnRmKHN0ZGVyciwgIkluICVzXG4i
LCBfX2Z1bmNfXyk7CiAgICAgIGlmIChoYXNSZXN1bHQoKSkKICAgICAgICAgIHJldHVybjsKICAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwoqKioqKioqKioqKioqKioKKioq
IDIyNCwyMzEgKioqKgogICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gZWZmZWN0RHJhd2luZ1Jl
Y3QuaGVpZ2h0KCk7CiAgICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gbWluKGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXNYKTsKICAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kg
PSBtaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXNZKTsKLSAKICAgICAg
cGxhdGZvcm1BcHBseSgmcGFpbnRpbmdEYXRhKTsKICB9CiAgCiAgdm9pZCBGRU1vcnBob2xvZ3k6
OmR1bXAoKQotLS0gMjcwLDMxMCAtLS0tCiAgICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBlZmZl
Y3REcmF3aW5nUmVjdC5oZWlnaHQoKTsKICAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBtaW4o
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1c1gpOwogICAgICBwYWludGluZ0Rh
dGEucmFkaXVzWSA9IG1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1c1kp
OwogICAgICBwbGF0Zm9ybUFwcGx5KCZwYWludGluZ0RhdGEpOworICNpZmRlZiBVU0VfQ19QUk9G
SUxJTkcKKyAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0aW1lMik7CisgCXRkaWZm
ID0gdGltZV9kaWZmKHRpbWUxLHRpbWUyKTsKKyAJcHJpbnRmKCJUaW1lIHRha2VuIHRvIG1vcnBo
ID0gJWxkLSVsZCBuc2VjIFxuXG4iLCB0ZGlmZi50dl9zZWMsIHRkaWZmLnR2X25zZWMpOworICNl
bmRpZiAvLyBVU0VfQ19QUk9GSUxJTkcKKyAjaWZkZWYgRFVNUF9EQVRBCisgCUZJTEUgKm91dGZp
bGU7CisgCUZJTEUgKmluZmlsZTsKKyAJY2hhciogZmlsZW5hbWU7CisgCWZpbGVuYW1lID0gKGNo
YXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiA5KTsKKyAJaWYgKG1fdHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRElMQVRFKSB7CisgCQlzcHJpbnRmKGZpbGVuYW1lLCAiZHVtcF8laV8laV9E
SUxBVEUiLCByYWRpdXNYLCByYWRpdXNZKTsKKyAJfSBlbHNlIGlmIChtX3R5cGUgPT0gRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFKSB7CisgCQlzcHJpbnRmKGZpbGVuYW1lLCAiZHVtcF8laV8l
aV9FUk9ERSIsIHJhZGl1c1gsIHJhZGl1c1kpOworIAl9IGVsc2UgeworIAkJc3ByaW50ZihmaWxl
bmFtZSwgImR1bXBfJWlfJWlfdW5rbm93biIsIHJhZGl1c1gsIHJhZGl1c1kpOworIAl9CisgCQor
IAlvdXRmaWxlID0gZm9wZW4oZmlsZW5hbWUsIndiIik7CisgCWluZmlsZSA9IGZvcGVuKCJpbnB1
dF9maWxlIiwid2IiKTsKKyAJaWYob3V0ZmlsZSA9PSBOVUxMKSB7CisgICAgIHByaW50ZigiRXJy
b3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisgCX0gZWxzZSB7CisgCQlmd3JpdGUocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXksIDEsIHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0
YS5oZWlnaHQgKiA0LCBpbmZpbGUpOworIAkJZndyaXRlKHBhaW50aW5nRGF0YS5kc3RQaXhlbEFy
cmF5LCAxLCBwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICogNCwgb3V0
ZmlsZSk7CisgCQlwcmludGYoIndyaXR0ZW4gc2l6ZSAlaSB3ICVpIGggJWlcbiIsIChwYWludGlu
Z0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICogNCksIHBhaW50aW5nRGF0YS53aWR0
aCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CisgCQlpZihmY2xvc2Uob3V0ZmlsZSkgIT0gMCkgewor
IAkgICAgcHJpbnRmKCJFcnJvciBjbG9zaW5nIG91dHB1dCBmaWxlXG4iKTsKKyAJCX0KKyAJCWlm
KGZjbG9zZShpbmZpbGUpICE9IDApIHsKKyAJICAgIHByaW50ZigiRXJyb3IgY2xvc2luZyBpbnB1
dCBmaWxlXG4iKTsKKyAJCX0KKyAJfQorICNlbmRpZgogIH0KICAKICB2b2lkIEZFTW9ycGhvbG9n
eTo6ZHVtcCgpCioqKioqKioqKioqKioqKgoqKiogMjU5LDI2NCAqKioqCi0tLSAzMzgsNDAyIC0t
LS0KICAgICAgcmV0dXJuIHRzOwogIH0KICAKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyBpbmxpbmUg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlPQ0woUGFpbnRpbmdEYXRhKiBwYWludGlu
Z0RhdGEsIGludCBnbG9iYWx5U3RhcnQsIGludCBnbG9iYWx5RW5kKQorIHsKKyAJQnl0ZUFycmF5
KiBzcmNQaXhlbEFycmF5ID0gcGFpbnRpbmdEYXRhLT5zcmNQaXhlbEFycmF5OworIAlCeXRlQXJy
YXkqIGRzdFBpeGVsQXJyYXkgPSBwYWludGluZ0RhdGEtPmRzdFBpeGVsQXJyYXk7CisgCXVuc2ln
bmVkIGludCBsZW5ndGggPSBkc3RQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAJY2xfbWVtIGluYnVm
OworIAljbF9tZW0gb3V0YnVmOworIAorIAlib29sIHByb2ZpbGVfa2VybmVsID0gdHJ1ZTsKKyAJ
Ym9vbCBwcm9maWxlX2J1ZmZlcl9ydyA9IHRydWU7CisgCisgCXVuc2lnbmVkIGludCB3aWR0aCA9
IHBhaW50aW5nRGF0YS0+d2lkdGg7CisgCXVuc2lnbmVkIGludCBoZWlnaHQgPSBwYWludGluZ0Rh
dGEtPmhlaWdodDsKKyAJdW5zaWduZWQgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEtPnJhZGl1
c1g7CisgCXVuc2lnbmVkIGludCByYWRpdXNZID0gcGFpbnRpbmdEYXRhLT5yYWRpdXNZOworIAl1
bnNpZ25lZCBpbnQgbW9kZSA9IG1fdHlwZTsKKyAKKyAvLwlzaXplX3Qgc2l6ZV9vdXQgPSBzaXpl
b2YodW5zaWduZWQgY2hhcikgKiAoKHdpZHRoICogMTApL2hlaWdodCk7CisgLy8Jc2l6ZV90IHNp
emVfaW4gPSBzaXplb2YodW5zaWduZWQgY2hhcikgKiAod2lkdGggKiAoMTArcmFkaXVzWSkvaGVp
Z2h0KTsKKyAJc2l6ZV90IHNpemVfb3V0ID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogKGxlbmd0
aCk7CisgCXNpemVfdCBzaXplX2luID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogKGxlbmd0aCk7
CisgCXVuc2lnbmVkIGludCBib3VuZGFyeSA9IE5VTV9LRVJORUxTOworIAlzaXplX3QgYmxlbmRf
bG9jYWxfd29ya19zaXplWzFdID0ge0xPQ0FMX1dPUktfU0laRX07CisgCXNpemVfdCBibGVuZF9n
bG9iYWxfd29ya19zaXplWzFdID0gezB9OworIAorIAl3aGlsZShibGVuZF9nbG9iYWxfd29ya19z
aXplWzBdIDwgYm91bmRhcnkpCisgCXsKKyAJCWJsZW5kX2dsb2JhbF93b3JrX3NpemVbMF0gKz0g
YmxlbmRfbG9jYWxfd29ya19zaXplWzBdOworIAl9CisgCisgLy8gdGhlc2UgdmFsdWVzIHNob3Vs
ZCBiZSBjb21wdXRlZCBhbmQgYWRhcHRlZCB0byB0aGUgbnVtYmVyIG9mIGtlcm5lbHMgZXhlY3V0
ZWQKKyAKKyAJZ3B1Lm9wZW5jbENyZWF0ZUJ1ZmZlcigmaW5idWYsICAgQ0xfTUVNX1JFQURfV1JJ
VEUsIHNpemVfaW4pOworIAlncHUub3BlbmNsQ3JlYXRlQnVmZmVyKCZvdXRidWYsIENMX01FTV9S
RUFEX1dSSVRFLCBzaXplX291dCk7CisgCisgCWdwdS5vcGVuY2xXcml0ZUJ1ZmZlcigmaW5idWYs
IDAsIHNpemVfaW4sICh2b2lkKikgc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBwcm9maWxlX2J1ZmZl
cl9ydyk7CisgCisgCWdwdS5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAwLCBzaXplb2Yo
Y2xfbWVtKSwgKHZvaWQqKSAmaW5idWYpOworIAlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tl
cm5lbCwgMSwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikgJm91dGJ1Zik7CisgCWdwdS5vcGVuY2xT
ZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAyLCBzaXplb2YoY2xfdWludCksICh2b2lkKikgJndpZHRo
KTsKKyAJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWwsIDMsIHNpemVvZihjbF91aW50
KSwgKHZvaWQqKSAmaGVpZ2h0KTsKKyAJZ3B1Lm9wZW5jbFNldEtlcm5lbEFyZygmbV9rZXJuZWws
IDQsIHNpemVvZihjbF91aW50KSwgKHZvaWQqKSAmcmFkaXVzWCk7CisgCWdwdS5vcGVuY2xTZXRL
ZXJuZWxBcmcoJm1fa2VybmVsLCA1LCBzaXplb2YoY2xfdWludCksICh2b2lkKikgJnJhZGl1c1kp
OworIAlncHUub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgNiwgc2l6ZW9mKGNsX3VpbnQp
LCAodm9pZCopICZtb2RlKTsKKyAKKyAKKyAJZ3B1Lm9wZW5jbFJ1bktlcm5lbCgmbV9rZXJuZWws
IDEsIE5VTEwsIGJsZW5kX2dsb2JhbF93b3JrX3NpemUsIGJsZW5kX2xvY2FsX3dvcmtfc2l6ZSwg
cHJvZmlsZV9rZXJuZWwpOworIC8vCWdwdS5vcGVuY2xSdW5LZXJuZWxUYXNrKCZtX2tlcm5lbCwg
cHJvZmlsZV9rZXJuZWwpOworIAorIAlncHUub3BlbmNsUmVhZEJ1ZmZlcigmb3V0YnVmLCAwLCBz
aXplX291dCwgKHZvaWQqKSBkc3RQaXhlbEFycmF5LT5kYXRhKCksIHByb2ZpbGVfYnVmZmVyX3J3
KTsKKyAKKyAJZ3B1Lm9wZW5jbENsZWFuVXBCdWZmZXIoJmluYnVmKTsKKyAJZ3B1Lm9wZW5jbENs
ZWFuVXBCdWZmZXIoJm91dGJ1Zik7CisgfQorIAorICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQor
IAorIAogIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICAKICAjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpCmRpZmYgLXJjTiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmggd2Via2l0X29wZW5jbC9XZWJLaXQt
cjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmgKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAkyMDExLTExLTI0IDE4OjAxOjM0LjUzNDk1
MDE1NSArMDEwMAotLS0gd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJMjAxMS0xMS0yNCAxODow
MDowMy42NDY5NTAwOTYgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAyLDcgKioqKgotLS0gMiw4
IC0tLS0KICAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1pY3Jv
ZWxlY3Ryb25pY3MgLSBBdXRob3JzOiBEYXZpZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwuY29t
PiwgU3VyaW5kZXIgUGFsIFNpbmdoIDxzdXJpbmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1bGlv
IFVybGluaSA8Z2l1bGlvLnVybGluaUBzdC5jb20+CiAgICoKICAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKioq
KioqKioqKioqKioqCioqKiAyNiwzMSAqKioqCi0tLSAyNywzNyAtLS0tCiAgI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogICNpbmNsdWRlICJGaWx0ZXIuaCIKICAKKyAjaWYgRU5BQkxFKE9QRU5D
TCkKKyAjaW5jbHVkZSA8b2NsL29jbEhlbHBlci5oPgorIGV4dGVybiBPQ0xMYXllciBncHU7Cisg
I2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisgCiAgbmFtZXNwYWNlIFdlYkNvcmUgewogIAogIGVu
dW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CioqKioqKioqKioqKioqKgoqKiogNzksODggKioq
KgotLS0gODUsMTAyIC0tLS0KICAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
UGFpbnRpbmdEYXRhKiwgY29uc3QgaW50IHlTdGFydCwgY29uc3QgaW50IHlFbmQpOwogIHByaXZh
dGU6CiAgICAgIEZFTW9ycGhvbG9neShGaWx0ZXIqLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBm
bG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICAg
fkZFTW9ycGhvbG9neSgpOworICNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQogICAgICAKICAgICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CiAgICAgIGZsb2F0IG1fcmFkaXVzWDsKICAg
ICAgZmxvYXQgbV9yYWRpdXNZOworICNpZiBFTkFCTEUoT1BFTkNMKQorICAgICBpbmxpbmUgdm9p
ZCBwbGF0Zm9ybUFwcGx5T0NMKFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhLCBpbnQgZ2xvYmFs
eVN0YXJ0LCBpbnQgZ2xvYmFseUVuZCk7CisgICAgIGNsX3Byb2dyYW0gbV9wcm9ncmFtOworICAg
ICBjbF9rZXJuZWwgbV9rZXJuZWw7CisgI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCiAgfTsKICAK
ICB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116710</attachid>
            <date>2011-11-28 01:16:40 -0800</date>
            <delta_ts>2011-12-02 00:41:12 -0800</delta_ts>
            <desc>OCL kernels for modified SVG filters</desc>
            <filename>ocl_kernels_added.patch</filename>
            <type>text/plain</type>
            <size>36756</size>
            <attacher name="Giulio Urlini">sentangeleyes</attacher>
            
              <data encoding="base64">ZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUJsZW5kT0NMLmNsIHdlYmtpdF9vcGVuY2wv
V2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29j
bC9rZXJuZWxzL0ZFQmxlbmRPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUJsZW5kT0NM
LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRUJsZW5kT0NMLmNsCTIwMTEtMTEtMjQgMTg6MDA6MDMuNjQ2OTUwMDk2ICsw
MTAwCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDk2IC0tLS0KKyBfX2tlcm5lbCB2
b2lkIE5vcm1hbEJsZW5kKF9fZ2xvYmFsIHVjaGFyNCogaW5BLF9fZ2xvYmFsICB1Y2hhcjQqIGlu
QixfX2dsb2JhbCAgdWNoYXI0KiBvdXQsIHVpbnQgYm91bmRhcnkpCisgeworIAl1aW50IGluZGV4
ID0gZ2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91bmRhcnkpCisgCQlyZXR1cm47
CisgCQkJCisgCWZsb2F0NCBBID0gY29udmVydF9mbG9hdDQoaW5BW2luZGV4XSk7CisgCWZsb2F0
NCBCID0gY29udmVydF9mbG9hdDQoaW5CW2luZGV4XSk7CisgCWZsb2F0NCBPOworIAlmbG9hdCBh
bHBoYSA9IEEudyAvIDI1NS4wZjsKKyAJCisgCU8ueCA9ICgoMS4wZiAtIGFscGhhKSAqIEIueCAr
IEEueCk7CisgCU8ueSA9ICgoMS4wZiAtIGFscGhhKSAqIEIueSArIEEueSk7CisgCU8ueiA9ICgo
MS4wZiAtIGFscGhhKSAqIEIueiArIEEueik7CisgCU8udyA9ICgxLjBmIC0gKCgxLjBmIC0gYWxw
aGEpICogKDEuMGYgLSBCLncgLyAyNTUuMGYpKSkgKiAyNTUuMGY7CisgCQorIAlvdXRbaW5kZXhd
ID0gY29udmVydF91Y2hhcjQoTyk7CisgfQorIAorIF9fa2VybmVsIHZvaWQgTXVsdGlwbHlCbGVu
ZChfX2dsb2JhbCB1Y2hhcjQqIGluQSxfX2dsb2JhbCAgdWNoYXI0KiBpbkIsX19nbG9iYWwgIHVj
aGFyNCogb3V0LCB1aW50IGJvdW5kYXJ5KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxf
aWQoMCk7CisgCWlmKGluZGV4ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAkKKyAJZmxvYXQ0
IEEgPSBjb252ZXJ0X2Zsb2F0NChpbkFbaW5kZXhdKTsKKyAJZmxvYXQ0IEIgPSBjb252ZXJ0X2Zs
b2F0NChpbkJbaW5kZXhdKTsKKyAJZmxvYXQ0IE87CisgCWZsb2F0IGFscGhhMSA9IEEudyAvIDI1
NS4wZjsKKyAJZmxvYXQgYWxwaGEyID0gQi53IC8gMjU1LjBmOworIAkKKyAJTy54ID0gKCgxLjBm
IC0gYWxwaGExKSAqIEIueCArICgxLjBmIC0gYWxwaGEyICsgQi54IC8gMjU1LjBmKSAqIEEueCk7
CisgCU8ueSA9ICgoMS4wZiAtIGFscGhhMSkgKiBCLnkgKyAoMS4wZiAtIGFscGhhMiArIEIueSAv
IDI1NS4wZikgKiBBLnkpOworIAlPLnogPSAoKDEuMGYgLSBhbHBoYTEpICogQi56ICsgKDEuMGYg
LSBhbHBoYTIgKyBCLnogLyAyNTUuMGYpICogQS56KTsKKyAJTy53ID0gKDEuMGYgLSAoKDEuMGYg
LSBhbHBoYTEpICogKDEuMGYgLSBhbHBoYTIpKSkgKiAyNTUuMGY7CisgCQorIAlvdXRbaW5kZXhd
ID0gY29udmVydF91Y2hhcjQoTyk7CisgfQorIAorIF9fa2VybmVsIHZvaWQgU2NyZWVuQmxlbmQo
X19nbG9iYWwgdWNoYXI0KiBpbkEsX19nbG9iYWwgIHVjaGFyNCogaW5CLF9fZ2xvYmFsICB1Y2hh
cjQqIG91dCwgdWludCBib3VuZGFyeSkKKyB7CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lk
KDApOworIAlpZihpbmRleCA+PSBib3VuZGFyeSkKKyAJCXJldHVybjsKKyAJCisgCWZsb2F0NCBB
ID0gY29udmVydF9mbG9hdDQoaW5BW2luZGV4XSk7CisgCWZsb2F0NCBCID0gY29udmVydF9mbG9h
dDQoaW5CW2luZGV4XSk7CisgCWZsb2F0NCBPOworIAkKKyAJTy54ID0gKChCLnggKyBBLngpIC0g
KEEueCAqIEIueCkgLyAyNTUuMGYpOworIAlPLnkgPSAoKEIueSArIEEueSkgLSAoQS55ICogQi55
KSAvIDI1NS4wZik7CisgCU8ueiA9ICgoQi56ICsgQS56KSAtIChBLnogKiBCLnopIC8gMjU1LjBm
KTsKKyAJTy53ID0gKDEuMGYgLSAoKDEuMGYgLSBBLncgLyAyNTUuMGYpICogKDEuMGYgLSBCLncg
LyAyNTUuMGYpKSkgKiAyNTUuMGY7CisgCQorIAlvdXRbaW5kZXhdID0gY29udmVydF91Y2hhcjQo
Tyk7CisgfQorIAorIF9fa2VybmVsIHZvaWQgRGFya2VuQmxlbmQoX19nbG9iYWwgdWNoYXI0KiBp
bkEsX19nbG9iYWwgIHVjaGFyNCogaW5CLF9fZ2xvYmFsICB1Y2hhcjQqIG91dCwgdWludCBib3Vu
ZGFyeSkKKyB7CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+
PSBib3VuZGFyeSkKKyAJCXJldHVybjsKKyAJCisgCWZsb2F0NCBBID0gY29udmVydF9mbG9hdDQo
aW5BW2luZGV4XSk7CisgCWZsb2F0NCBCID0gY29udmVydF9mbG9hdDQoaW5CW2luZGV4XSk7Cisg
CWZsb2F0NCBPOworIAlmbG9hdCBhbHBoYTEgPSBBLncgLyAyNTUuMGY7CisgCWZsb2F0IGFscGhh
MiA9IEIudyAvIDI1NS4wZjsKKyAJCisgCU8ueCA9IChtaW4oKDEuMGYgLSBhbHBoYTEpICogQi54
ICsgQS54LCAoMS4wZiAtIGFscGhhMikgKiBBLnggKyBCLngpKTsKKyAJTy55ID0gKG1pbigoMS4w
ZiAtIGFscGhhMSkgKiBCLnkgKyBBLnksICgxLjBmIC0gYWxwaGEyKSAqIEEueSArIEIueSkpOwor
IAlPLnogPSAobWluKCgxLjBmIC0gYWxwaGExKSAqIEIueiArIEEueiwgKDEuMGYgLSBhbHBoYTIp
ICogQS56ICsgQi56KSk7CisgCU8udyA9ICgxLjBmIC0gKCgxLjBmIC0gYWxwaGExKSAqICgxLjBm
IC0gYWxwaGEyKSkpICogMjU1LjBmOworIAkKKyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0
KE8pOworIH0KKyAKKyBfX2tlcm5lbCB2b2lkIExpZ2h0ZW5CbGVuZChfX2dsb2JhbCB1Y2hhcjQq
IGluQSxfX2dsb2JhbCAgdWNoYXI0KiBpbkIsX19nbG9iYWwgIHVjaGFyNCogb3V0LCB1aW50IGJv
dW5kYXJ5KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4
ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAkKKyAJZmxvYXQ0IEEgPSBjb252ZXJ0X2Zsb2F0
NChpbkFbaW5kZXhdKTsKKyAJZmxvYXQ0IEIgPSBjb252ZXJ0X2Zsb2F0NChpbkJbaW5kZXhdKTsK
KyAJZmxvYXQ0IE87CisgCWZsb2F0IGFscGhhMSA9IEEudyAvIDI1NS4wZjsKKyAJZmxvYXQgYWxw
aGEyID0gQi53IC8gMjU1LjBmOworIAkKKyAJTy54ID0gKG1heCgoMS4wZiAtIGFscGhhMSkgKiBC
LnggKyBBLngsICgxLjBmIC0gYWxwaGEyKSAqIEEueCArIEIueCkpOworIAlPLnkgPSAobWF4KCgx
LjBmIC0gYWxwaGExKSAqIEIueSArIEEueSwgKDEuMGYgLSBhbHBoYTIpICogQS55ICsgQi55KSk7
CisgCU8ueiA9IChtYXgoKDEuMGYgLSBhbHBoYTEpICogQi56ICsgQS56LCAoMS4wZiAtIGFscGhh
MikgKiBBLnogKyBCLnopKTsKKyAJTy53ID0gKDEuMGYgLSAoKDEuMGYgLSBhbHBoYTEpICogKDEu
MGYgLSBhbHBoYTIpKSkgKiAyNTUuMGY7CisgCQorIAlvdXRbaW5kZXhdID0gY29udmVydF91Y2hh
cjQoTyk7CisgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtcmNOIG9yaWdpbmFs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRUNvbG9yTWF0cml4T0NMLmNsIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1
OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZF
Q29sb3JNYXRyaXhPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUNvbG9yTWF0cml4T0NM
LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRUNvbG9yTWF0cml4T0NMLmNsCTIwMTEtMTEtMjQgMTg6MDA6MDMuNjQ2OTUw
MDk2ICswMTAwCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDczIC0tLS0KKyBfX2tl
cm5lbCB2b2lkIE1hdHJpeENvbG9yKF9fZ2xvYmFsIHVjaGFyNCogaW4sIF9fZ2xvYmFsIHVjaGFy
NCogb3V0LCBfX2dsb2JhbCBmbG9hdCogdmFsdWVzLCB1aW50IGJvdW5kYXJ5KQorIHsKKyAJdWlu
dCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4ID49IGJvdW5kYXJ5KQorIAkJ
cmV0dXJuOworIAkJCisgCWZsb2F0NCBvdXRmbHQ7CisgCWZsb2F0NCBpbmZsdCA9IGNvbnZlcnRf
ZmxvYXQ0KGluW2luZGV4XSk7CisgCQorIAlvdXRmbHQueCA9IHZhbHVlc1swXSAgKiBpbmZsdC54
ICsgdmFsdWVzWzFdICAqIGluZmx0LnkgKyB2YWx1ZXNbMl0gICogaW5mbHQueiArIHZhbHVlc1sz
XSAgKiBpbmZsdC53ICsgdmFsdWVzWzRdICAqIDI1NS4wZjsKKyAJb3V0Zmx0LnkgPSB2YWx1ZXNb
NV0gICogaW5mbHQueCArIHZhbHVlc1s2XSAgKiBpbmZsdC55ICsgdmFsdWVzWzddICAqIGluZmx0
LnogKyB2YWx1ZXNbOF0gICogaW5mbHQudyArIHZhbHVlc1s5XSAgKiAyNTUuMGY7CisgCW91dGZs
dC56ID0gdmFsdWVzWzEwXSAqIGluZmx0LnggKyB2YWx1ZXNbMTFdICogaW5mbHQueSArIHZhbHVl
c1sxMl0gKiBpbmZsdC56ICsgdmFsdWVzWzEzXSAqIGluZmx0LncgKyB2YWx1ZXNbMTRdICogMjU1
LjBmOworIAlvdXRmbHQudyA9IHZhbHVlc1sxNV0gKiBpbmZsdC54ICsgdmFsdWVzWzE2XSAqIGlu
Zmx0LnkgKyB2YWx1ZXNbMTddICogaW5mbHQueiArIHZhbHVlc1sxOF0gKiBpbmZsdC53ICsgdmFs
dWVzWzE5XSAqIDI1NS4wZjsKKyAJCisgCW91dFtpbmRleF0gPSBjb252ZXJ0X3VjaGFyNChvdXRm
bHQpOworIH0KKyAKKyBfX2tlcm5lbCB2b2lkIFNhdHVyYXRlQ29sb3IoX19nbG9iYWwgdWNoYXI0
KiBpbiwgX19nbG9iYWwgdWNoYXI0KiBvdXQsIGZsb2F0IHNhdCwgdWludCBib3VuZGFyeSkKKyB7
CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+PSBib3VuZGFy
eSkKKyAJCXJldHVybjsKKyAJCQorIAlmbG9hdDQgb3V0Zmx0OworIAlmbG9hdDQgaW5mbHQgPSBj
b252ZXJ0X2Zsb2F0NChpbltpbmRleF0pOworIAkKKyAJb3V0Zmx0LnggPSAoMC4yMTNmICsgMC43
ODdmICogc2F0KSAqIGluZmx0LnggKyAoMC43MTVmIC0gMC43MTVmICogc2F0KSAqIGluZmx0Lnkg
KyAoMC4wNzJmIC0gMC4wNzJmICogc2F0KSAqIGluZmx0Lno7CisgCW91dGZsdC55ID0gKDAuMjEz
ZiAtIDAuMjEzZiAqIHNhdCkgKiBpbmZsdC54ICsgKDAuNzE1ZiArIDAuMjg1ZiAqIHNhdCkgKiBp
bmZsdC55ICsgKDAuMDcyZiAtIDAuMDcyZiAqIHNhdCkgKiBpbmZsdC56OworIAlvdXRmbHQueiA9
ICgwLjIxM2YgLSAwLjIxM2YgKiBzYXQpICogaW5mbHQueCArICgwLjcxNWYgLSAwLjcxNWYgKiBz
YXQpICogaW5mbHQueSArICgwLjA3MmYgKyAwLjkyOGYgKiBzYXQpICogaW5mbHQuejsKKyAJb3V0
Zmx0LncgPSBpbmZsdC53OworIAkKKyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KG91dGZs
dCk7CisgfQorIAorIF9fa2VybmVsIHZvaWQgSHVlUm90YXRlQ29sb3IoX19nbG9iYWwgdWNoYXI0
KiBpbiwgX19nbG9iYWwgdWNoYXI0KiBvdXQsIGZsb2F0IGNvc0h1ZSwgZmxvYXQgc2luSHVlLCB1
aW50IGJvdW5kYXJ5KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlm
KGluZGV4ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAkJCisgCWZsb2F0NCBvdXRmbHQ7Cisg
CWZsb2F0NCBpbmZsdCA9IGNvbnZlcnRfZmxvYXQ0KGluW2luZGV4XSk7CisgCQorIAlvdXRmbHQu
eCA9IGluZmx0LnggKiAoMC4yMTNmICsgY29zSHVlICogMC43ODdmIC0gc2luSHVlICogMC4yMTNm
KSArCisgICAgICAgICAgICAgICAgaW5mbHQueSAqICgwLjcxNWYgLSBjb3NIdWUgKiAwLjcxNWYg
LSBzaW5IdWUgKiAwLjcxNWYpICsKKyAgICAgICAgICAgICAgICBpbmZsdC56ICogKDAuMDcyZiAt
IGNvc0h1ZSAqIDAuMDcyZiArIHNpbkh1ZSAqIDAuOTI4Zik7CisgICAgIG91dGZsdC55ID0gaW5m
bHQueCAqICgwLjIxM2YgLSBjb3NIdWUgKiAwLjIxM2YgKyBzaW5IdWUgKiAwLjE0M2YpICsKKyAg
ICAgICAgICAgICAgICBpbmZsdC55ICogKDAuNzE1ZiArIGNvc0h1ZSAqIDAuMjg1ZiArIHNpbkh1
ZSAqIDAuMTQwZikgKworICAgICAgICAgICAgICAgIGluZmx0LnogKiAoMC4wNzJmIC0gY29zSHVl
ICogMC4wNzJmIC0gc2luSHVlICogMC4yODNmKTsKKyAgICAgb3V0Zmx0LnogPSBpbmZsdC54ICog
KDAuMjEzZiAtIGNvc0h1ZSAqIDAuMjEzZiAtIHNpbkh1ZSAqIDAuNzg3ZikgKworICAgICAgICAg
ICAgICAgIGluZmx0LnkgKiAoMC43MTVmIC0gY29zSHVlICogMC43MTVmICsgc2luSHVlICogMC43
MTVmKSArCisgICAgICAgICAgICAgICAgaW5mbHQueiAqICgwLjA3MmYgKyBjb3NIdWUgKiAwLjky
OGYgKyBzaW5IdWUgKiAwLjA3MmYpOworICAgICBvdXRmbHQudyA9IGluZmx0Lnc7CisgICAgIAor
ICAgICBvdXRbaW5kZXhdID0gY29udmVydF91Y2hhcjQob3V0Zmx0KTsKKyB9CisgCisgX19rZXJu
ZWwgdm9pZCBMdW1pbmFuY2VUb0FscGhhQ29sb3IoX19nbG9iYWwgdWNoYXI0KiBpbiwgX19nbG9i
YWwgdWNoYXI0KiBvdXQsIHVpbnQgYm91bmRhcnkpCisgeworIAl1aW50IGluZGV4ID0gZ2V0X2ds
b2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91bmRhcnkpCisgCQlyZXR1cm47CisgCQkKKyAJ
ZmxvYXQ0IG91dGZsdDsKKyAJZmxvYXQ0IGluZmx0ID0gY29udmVydF9mbG9hdDQoaW5baW5kZXhd
KTsKKyAJCisgCW91dGZsdC54ID0gMC4wZjsKKyAJb3V0Zmx0LnkgPSAwLjBmOworIAlvdXRmbHQu
eiA9IDAuMGY7CisgCW91dGZsdC53ID0gMC4yMTI1ZiAqIGluZmx0LnggKyAwLjcxNTRmICogaW5m
bHQueSArIDAuMDcyMWYgKiBpbmZsdC56OworIAkKKyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNo
YXI0KG91dGZsdCk7CisgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtcmNOIG9y
aWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9vY2wva2VybmVscy9GRUNvbXBvbmVudFRyYW5zZmVyT0NMLmNsIHdlYmtpdF9vcGVuY2wv
V2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29j
bC9rZXJuZWxzL0ZFQ29tcG9uZW50VHJhbnNmZXJPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1y
OTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVs
cy9GRUNvbXBvbmVudFRyYW5zZmVyT0NMLmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUNvbXBvbmVudFRyYW5zZmVyT0NM
LmNsCTIwMTEtMTEtMjQgMTg6MDA6MDMuNjQ2OTUwMDk2ICswMTAwCioqKioqKioqKioqKioqKgoq
KiogMCAqKioqCi0tLSAxLDIyIC0tLS0KKyBfX2tlcm5lbCB2b2lkIENvbXBvbmVudFRyYW5zZmVy
KF9fZ2xvYmFsIHVjaGFyNCogaW4sCisgCQkJCQkJCSAgIAlfX2dsb2JhbCB1Y2hhcjQqIG91dCwK
KyAJCQkJCQkJICAgCV9fZ2xvYmFsIHVjaGFyKiByX2x1dCwKKyAJCQkJCQkJICAgCV9fZ2xvYmFs
IHVjaGFyKiBnX2x1dCwKKyAJCQkJCQkJICAJX19nbG9iYWwgdWNoYXIqIGJfbHV0LAorIAkJCQkJ
CQkgICAJX19nbG9iYWwgdWNoYXIqIGFfbHV0LAorIAkJCQkJCQkgICAJdWludCBib3VuZGFyeSkK
KyB7CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+PSBib3Vu
ZGFyeSkKKyAJCXJldHVybjsKKyAJCQorIAl1Y2hhcjQgb3V0dG1wOworIAl1Y2hhcjQgaW50bXAg
PSBpbltpbmRleF07CisgCQorIAlvdXR0bXAueCA9IHJfbHV0W2ludG1wLnhdOworIAlvdXR0bXAu
eSA9IGdfbHV0W2ludG1wLnldOworIAlvdXR0bXAueiA9IGJfbHV0W2ludG1wLnpdOworIAlvdXR0
bXAudyA9IGFfbHV0W2ludG1wLnddOworIAkKKyAJb3V0W2luZGV4XSA9IG91dHRtcDsJCisgfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUz
NTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9G
RURpc3BsYWNlbWVudE1hcE9DTC5jbCB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRURpc3BsYWNl
bWVudE1hcE9DTC5jbAoqKiogb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFRGlzcGxhY2VtZW50TWFwT0NM
LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRURpc3BsYWNlbWVudE1hcE9DTC5jbAkyMDExLTExLTI0IDE4OjAwOjAzLjY0
Njk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSwzMyAtLS0tCisg
X19rZXJuZWwgdm9pZCBEaXNwbGFjZW1lbnRNYXAoX19nbG9iYWwgdWNoYXI0KiBpbkEsCisgCQkJ
CQkJCSAgX19nbG9iYWwgdWNoYXIqIGluQiwKKyAJCQkJCQkJICBfX2dsb2JhbCB1Y2hhcjQqIG91
dCwKKyAJCQkJCQkJICBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSwKKyAJCQkJCQkJICBmbG9h
dCBzY2FsZUFkanVzdG1lbnRYLCBmbG9hdCBzY2FsZUFkanVzdG1lbnRZLAorIAkJCQkJCQkgIHVp
bnQgY2hhblNlbGVjdFgsIHVpbnQgY2hhblNlbGVjdFksCisgCQkJCQkJCSAgdWludCB3aWR0aCwg
dWludCBoZWlnaHQsIHVpbnQgYm91bmRhcnkpCisgeworIAl1aW50IGluZGV4ID0gZ2V0X2dsb2Jh
bF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91bmRhcnkpCisgCQlyZXR1cm47CisgCQkKKyAJdWNo
YXI0IG91dHRtcDsKKyAJCQorIAl1aW50IHN0cmlkZV91YyAgPSB3aWR0aCAqIDQ7CisgCXVpbnQg
c3RyaWRlX3VjNCA9IHdpZHRoOworIAl1aW50IHkgPSBpbmRleCAvIHdpZHRoOworIAl1aW50IHgg
PSBpbmRleCAtICh3aWR0aCAqIHkpOworIAl1aW50IGxpbmVfdWMgID0geSAqIHN0cmlkZV91YzsK
KyAJdWludCBsaW5lX3VjNCA9IHkgKiBzdHJpZGVfdWM0OworIAl1aW50IGRzdEluZGV4X3VjICA9
IGxpbmVfdWMgKyB4ICogNDsKKyAJdWludCBkc3RJbmRleF91YzQgPSBsaW5lX3VjNCArIHg7Cisg
CQorIAlpbnQgc3JjWCA9IHggKyBjb252ZXJ0X2ludChzY2FsZVggKiBpbkJbZHN0SW5kZXhfdWMg
KyBjaGFuU2VsZWN0WCAtIDFdICsgc2NhbGVBZGp1c3RtZW50WCk7CisgCWludCBzcmNZID0geSAr
IGNvbnZlcnRfaW50KHNjYWxlWSAqIGluQltkc3RJbmRleF91YyArIGNoYW5TZWxlY3RZIC0gMV0g
KyBzY2FsZUFkanVzdG1lbnRZKTsKKyAJCisgCWlmKHNyY1ggPCAwIHx8IHNyY1ggPj0gd2lkdGgg
fHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBoZWlnaHQpCisgCQlvdXR0bXAgPSAodWNoYXI0KSAoMCk7
CisgCWVsc2UKKyAJCW91dHRtcCA9IGluQVtzcmNZICogc3RyaWRlX3VjNCArIHNyY1hdOworIAkK
KyAJb3V0W2RzdEluZGV4X3VjNF0gPSBvdXR0bXA7CisgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUdhdXNzaWFuQmx1ck9DTC5jbCB3
ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9vY2wva2VybmVscy9GRUdhdXNzaWFuQmx1ck9DTC5jbAoqKiogb3JpZ2luYWwv
V2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29j
bC9rZXJuZWxzL0ZFR2F1c3NpYW5CbHVyT0NMLmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUdhdXNzaWFuQmx1ck9DTC5j
bAkyMDExLTExLTI0IDE4OjAwOjAzLjY0Njk1MDA5NiArMDEwMAoqKioqKioqKioqKioqKioKKioq
IDAgKioqKgotLS0gMSw4NCAtLS0tCisgZmxvYXQ0IHJnYmFVaW50VG9GbG9hdDQoY29uc3QgdW5z
aWduZWQgaW50IHVpUGFja2VkUkdCQSkKKyB7CisgICAgIGZsb2F0NCByZ2JhOworICAgICByZ2Jh
LnggPSB1aVBhY2tlZFJHQkEgJiAweGZmOworICAgICByZ2JhLnkgPSAodWlQYWNrZWRSR0JBID4+
IDgpICYgMHhmZjsKKyAgICAgcmdiYS56ID0gKHVpUGFja2VkUkdCQSA+PiAxNikgJiAweGZmOwor
ICAgICByZ2JhLncgPSAodWlQYWNrZWRSR0JBID4+IDI0KTsKKyAgICAgcmV0dXJuIHJnYmE7Cisg
fQorIAorIHVuc2lnbmVkIGludCByZ2JhRmxvYXQ0VG9VaW50KGNvbnN0IGZsb2F0NCByZ2JhKQor
IHsKKyAgICAgdW5zaWduZWQgaW50IHVpUGFja2VkUkdCQSA9IDBVOworICAgICB1aVBhY2tlZFJH
QkEgfD0gKHVuc2lnbmVkIGludClyZ2JhLng7CisgICAgIHVpUGFja2VkUkdCQSB8PSAoKCh1bnNp
Z25lZCBpbnQpcmdiYS55KSA8PCA4KTsKKyAgICAgdWlQYWNrZWRSR0JBIHw9ICgoKHVuc2lnbmVk
IGludClyZ2JhLnopIDw8IDE2KTsKKyAgICAgdWlQYWNrZWRSR0JBIHw9ICgoKHVuc2lnbmVkIGlu
dClyZ2JhLncpIDw8IDI0KTsKKyAgICAgcmV0dXJuIHVpUGFja2VkUkdCQTsKKyB9CisgCisgX19r
ZXJuZWwgdm9pZCBUcmFuc3Bvc2UoX19nbG9iYWwgY29uc3QgdW5zaWduZWQgaW50KiB1aURhdGFJ
biwgX19nbG9iYWwgdW5zaWduZWQgaW50KiB1aURhdGFPdXQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpV2lkdGgsIGludCBpSGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xvY2FsIHVuc2lnbmVkIGludCogdWlMb2NhbEJ1ZmYpCisgeworICAgICAvLyByZWFkIHRo
ZSBtYXRyaXggdGlsZSBpbnRvIExNRU0KKyAgICAgdW5zaWduZWQgaW50IHhJbmRleCA9IGdldF9n
bG9iYWxfaWQoMCk7CisgICAgIHVuc2lnbmVkIGludCB5SW5kZXggPSBnZXRfZ2xvYmFsX2lkKDEp
OworIAorICAgICBpZigoeEluZGV4IDwgaVdpZHRoKSAmJiAoeUluZGV4IDwgaUhlaWdodCkpCisg
ICAgIHsKKyAgICAgICAgIHVpTG9jYWxCdWZmW2dldF9sb2NhbF9pZCgxKSAqIChnZXRfbG9jYWxf
c2l6ZSgwKSArIDEpICsgZ2V0X2xvY2FsX2lkKDApXSA9IHVpRGF0YUluWyh5SW5kZXggKiBpV2lk
dGgpICsgeEluZGV4XTsKKyAgICAgfQorIAorICAgICAvLyBTeW5jaHJvbml6ZSB0aGUgcmVhZCBp
bnRvIExNRU0KKyAgICAgYmFycmllcihDTEtfTE9DQUxfTUVNX0ZFTkNFKTsKKyAKKyAgICAgLy8g
d3JpdGUgdGhlIHRyYW5zcG9zZWQgbWF0cml4IHRpbGUgdG8gZ2xvYmFsIG1lbW9yeQorICAgICB4
SW5kZXggPSBtdWwyNChnZXRfZ3JvdXBfaWQoMSksIGdldF9sb2NhbF9zaXplKDEpKSArIGdldF9s
b2NhbF9pZCgwKTsKKyAgICAgeUluZGV4ID0gbXVsMjQoZ2V0X2dyb3VwX2lkKDApLCBnZXRfbG9j
YWxfc2l6ZSgwKSkgKyBnZXRfbG9jYWxfaWQoMSk7CisgICAgIGlmKCh4SW5kZXggPCBpSGVpZ2h0
KSAmJiAoeUluZGV4IDwgaVdpZHRoKSkKKyAgICAgeworICAgICAgICAgdWlEYXRhT3V0Wyh5SW5k
ZXggKiBpSGVpZ2h0KSArIHhJbmRleF0gPSB1aUxvY2FsQnVmZltnZXRfbG9jYWxfaWQoMCkgKiAo
Z2V0X2xvY2FsX3NpemUoMSkgKyAxKSArIGdldF9sb2NhbF9pZCgxKV07CisgICAgIH0KKyB9Cisg
CisgX19rZXJuZWwgdm9pZCBHYXVzc2lhblJHQkEoX19nbG9iYWwgY29uc3QgdW5zaWduZWQgaW50
KiB1aURhdGFJbiwgX19nbG9iYWwgdW5zaWduZWQgaW50KiB1aURhdGFPdXQsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVdpZHRoLCBpbnQgaUhlaWdodCwgZmxvYXQg
YSkKKyB7CisgICAgIC8vIGNvbXB1dGUgWCBwaXhlbCBsb2NhdGlvbiBhbmQgY2hlY2sgaW4tYm91
bmRzCisgICAgIHVuc2lnbmVkIGludCBYID0gbXVsMjQoZ2V0X2dyb3VwX2lkKDApLCBnZXRfbG9j
YWxfc2l6ZSgwKSkgKyBnZXRfbG9jYWxfaWQoMCk7CisgCWlmIChYID49IGlXaWR0aCkgcmV0dXJu
OworICAgICAKKyAgICAgLy8gYWR2YW5jZSBnbG9iYWwgcG9pbnRlcnMgdG8gY29ycmVjdCBjb2x1
bW4gZm9yIHRoaXMgd29yayBpdGVtIGFuZCB4IHBvc2l0aW9uCisgICAgIHVpRGF0YUluICs9IFg7
ICAgIAorICAgICB1aURhdGFPdXQgKz0gWDsKKyAKKyAgICAgLy8gc3RhcnQgZm9yd2FyZCBmaWx0
ZXIgcGFzcworICAgICBmbG9hdDQgeXAgPSByZ2JhVWludFRvRmxvYXQ0KCp1aURhdGFJbik7ICAv
LyBwcmV2aW91cyBvdXRwdXQKKyAgICAgZm9yIChpbnQgWSA9IDA7IFkgPCBpSGVpZ2h0OyBZKysp
IAorICAgICB7CisgICAgICAgICBmbG9hdDQgeGMgPSByZ2JhVWludFRvRmxvYXQ0KCp1aURhdGFJ
bik7CisgICAgICAgICBmbG9hdDQgeWMgPSB4YyArICh5cCAtIHhjKSAqIChmbG9hdDQpYTsgICAK
KyAJCSp1aURhdGFPdXQgPSByZ2JhRmxvYXQ0VG9VaW50KHljKTsKKyAgICAgICAgIHlwID0geWM7
CisgICAgICAgICB1aURhdGFJbiArPSBpV2lkdGg7ICAgICAvLyBtb3ZlIHRvIG5leHQgcm93Cisg
ICAgICAgICB1aURhdGFPdXQgKz0gaVdpZHRoOyAgICAvLyBtb3ZlIHRvIG5leHQgcm93CisgICAg
IH0KKyAKKyAgICAgLy8gcmVzZXQgZ2xvYmFsIHBvaW50ZXJzIHRvIHBvaW50IHRvIGxhc3QgZWxl
bWVudCBpbiBjb2x1bW4gZm9yIHRoaXMgd29yayBpdGVtIGFuZCB4IHBvc2l0aW9uCisgICAgIHVp
RGF0YUluIC09IGlXaWR0aDsKKyAgICAgdWlEYXRhT3V0IC09IGlXaWR0aDsKKyAKKyAgICAgLy8g
c3RhcnQgcmV2ZXJzZSBmaWx0ZXIgcGFzczogZW5zdXJlcyByZXNwb25zZSBpcyBzeW1tZXRyaWNh
bAorICAgICB5cCA9IHJnYmFVaW50VG9GbG9hdDQoKnVpRGF0YUluKTsKKyAgICAgZm9yIChpbnQg
WSA9IGlIZWlnaHQgLSAxOyBZID4gLTE7IFktLSkgCisgICAgIHsKKyAgICAgICAgIGZsb2F0NCB4
YyA9IHJnYmFVaW50VG9GbG9hdDQoKnVpRGF0YUluKTsKKyAgICAgICAgIGZsb2F0NCB5YyA9IHhj
ICsgKHlwIC0geGMpICogKGZsb2F0NClhOworIAkJKnVpRGF0YU91dCA9IHJnYmFGbG9hdDRUb1Vp
bnQoKHJnYmFVaW50VG9GbG9hdDQoKnVpRGF0YU91dCkgKyB5YykgKiAwLjVmKTsKKyAgICAgICAg
IHlwID0geWM7CisgICAgICAgICB1aURhdGFJbiAtPSBpV2lkdGg7ICAgLy8gbW92ZSB0byBwcmV2
aW91cyByb3cKKyAgICAgICAgIHVpRGF0YU91dCAtPSBpV2lkdGg7ICAvLyBtb3ZlIHRvIHByZXZp
b3VzIHJvdworICAgICB9CisgfQpkaWZmIC1yY04gb3JpZ2luYWwvV2ViS2l0LXI5NTM1OC9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFTGlnaHRp
bmdPQ0wuY2wgd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL2tlcm5lbHMvRkVMaWdodGluZ09DTC5jbAoqKiogb3Jp
Z2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL29jbC9rZXJuZWxzL0ZFTGlnaHRpbmdPQ0wuY2wJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKLS0tIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFTGlnaHRpbmdPQ0wuY2wJ
MjAxMS0xMS0yNCAxODowMDowMy42NTA5NTAwOTYgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAw
ICoqKioKLS0tIDEsNDQ5IC0tLS0KKyBfX2NvbnN0YW50IGludCBjUGl4ZWxTaXplID0gNDsKKyBf
X2NvbnN0YW50IGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKKyBfX2NvbnN0YW50IGZsb2F0
IGNGYWN0b3IxZGl2NCA9IC0xLjBmIC8gNC4wZjsKKyAKKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAJ
ZmxvYXQgeDsKKyAJZmxvYXQgeTsKKyAJZmxvYXQgejsKKyB9TXlGbG9hdFBvaW50M0Q7CisgCisg
dHlwZWRlZiBzdHJ1Y3QKKyB7CisgCWludCB4OworIAlpbnQgeTsKKyB9TXlJbnRQb2ludDJEOwor
IAorIHR5cGVkZWYgc3RydWN0CisgeworIAlpbnQgeDsKKyAJaW50IHk7CisgCWludCB6OworIH1N
eUludFBvaW50M0Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QKKyB7CisgCU15RmxvYXRQb2ludDNEIGxp
Z2h0VmVjdG9yOworIAlNeUZsb2F0UG9pbnQzRCBjb2xvclZlY3RvcjsKKyAJZmxvYXQgbGlnaHRW
ZWN0b3JMZW5ndGg7CisgCU15RmxvYXRQb2ludDNEIGxpZ2h0U291cmNlUG9zaXRpb247CisgCU15
RmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKKyAJTXlGbG9hdFBvaW50M0QgcHJpdmF0ZUNv
bG9yVmVjdG9yOworIAlmbG9hdCBjb25lQ3V0T2ZmTGltaXQ7CisgCWZsb2F0IGNvbmVGdWxsTGln
aHQ7CisgCWludCBzcGVjdWxhckV4cG9uZW50OworIH1QYWludGluZ0RhdGFPQ0w7CisgCisgZmxv
YXQgdmVjdG9yM0RMZW5ndGgoTXlGbG9hdFBvaW50M0QgdmVjdG9yKQorIHsKKyAJZmxvYXQgbGVu
Z3RoID0gc3FydCh2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZl
Y3Rvci56ICogdmVjdG9yLnopOworIAlyZXR1cm4gbGVuZ3RoOworIH0KKyAKKyBmbG9hdCB2ZWN0
b3IzRERvdChNeUZsb2F0UG9pbnQzRCB2ZWN0b3JBLCBNeUZsb2F0UG9pbnQzRCB2ZWN0b3JCKQor
IHsKKyAJZmxvYXQgdmFsID0gdmVjdG9yQS54ICogdmVjdG9yQi54ICsgdmVjdG9yQS55ICogdmVj
dG9yQi55ICsgdmVjdG9yQS56ICogdmVjdG9yQi56OworIAlyZXR1cm4gdmFsOworIH0KKyAKKyBN
eUludFBvaW50MkQgY2FsY3VsYXRlTm9ybWFsMkRWZWN0b3IodWNoYXIqIGluLCBpbnQgb2Zmc2V0
KQorIHsKKyAJTXlJbnRQb2ludDJEIG5vcm1hbDJEVmVjdG9yOworIH0KKyAKKyBfX2tlcm5lbCB2
b2lkIERpZmZ1c2VMaWdodGluZ1BvaW50TGlnaHQoX19nbG9iYWwgdWNoYXIqIHdyaywKKyAJCQkJ
CQkJCQkJUGFpbnRpbmdEYXRhT0NMIHBhaW50aW5nRGF0YSwKKyAJCQkJCQkJCQkJaW50IHdpZHRo
LAorIAkJCQkJCQkJCQlmbG9hdCBzdXJmYWNlU2NhbGUsCisgCQkJCQkJCQkJCXVpbnQgYm91bmRh
cnksCisgCQkJCQkJCQkJCWZsb2F0IGRpZmZ1c2VDb25zdGFudCkKKyB7CisgCXVpbnQgaW5kZXgg
PSBnZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+PWJvdW5kYXJ5KQorIAkJcmV0dXJuOwor
IAorIAlpbnQgb2Zmc2V0ID0gIGNQaXhlbFNpemUgKiAoaW5kZXggKyB3aWR0aCArIDEgKyAoMiAq
IChpbmRleCAvICh3aWR0aCAtIDIpKSkpOworIAkKKyAJaW50IHkgPSAob2Zmc2V0IC8gY1BpeGVs
U2l6ZSkgLyB3aWR0aDsKKyAJaW50IHggPSAob2Zmc2V0IC8gY1BpeGVsU2l6ZSkgLSAod2lkdGgg
KiB5KTsKKyAJaW50IHogPSB3cmtbb2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldF0gKiBzdXJm
YWNlU2NhbGU7CisgCQorIAlwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueCA9IChwYWludGluZ0Rh
dGEubGlnaHRTb3VyY2VQb3NpdGlvbi54IC0geCk7CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci55ID0gKHBhaW50aW5nRGF0YS5saWdodFNvdXJjZVBvc2l0aW9uLnkgLSB5KTsKKyAgICAg
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnogPSAocGFpbnRpbmdEYXRhLmxpZ2h0U291cmNlUG9z
aXRpb24ueiAtIHopOworICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGggPSB2ZWN0
b3IzRExlbmd0aChwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpOworIAkKKyAJTXlJbnRQb2ludDJE
IG5vcm1hbDJEVmVjdG9yOworIAlpbnQgb2Zmc2V0X3RtcCA9IG9mZnNldDsKKyAJCisgCWludCBs
ZWZ0ICAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0XTsKKyAJaW50IHJpZ2h0ICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1wIC09IHdpZHRoICogY1BpeGVs
U2l6ZTsKKyAJaW50IHRvcExlZnQgICAgICA9IHdya1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgdG9wICAgICAgICAgID0gd3JrW29mZnNldF90
bXAgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHRvcFJpZ2h0ICAgICA9IHdya1tvZmZz
ZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1w
ICs9ICh3aWR0aCAqIGNQaXhlbFNpemUpIDw8IDE7CisgCWludCBib3R0b21MZWZ0ICAgPSB3cmtb
b2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IGJv
dHRvbSAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWlu
dCBib3R0b21SaWdodCAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0XTsKKyAJbm9ybWFsMkRWZWN0b3IueCA9ICgtdG9wTGVmdCArIHRvcFJpZ2h0IC0g
KGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQpOwor
ICAgICBub3JtYWwyRFZlY3Rvci55ID0gKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0
ICsgYm90dG9tTGVmdCArIChib3R0b20gPDwgMSkgKyBib3R0b21SaWdodCk7CisgICAgICAgICAg
ICAgCisgICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgIAorIAlNeUZsb2F0UG9pbnQzRCBu
b3JtYWxWZWN0b3I7CisgCW5vcm1hbFZlY3Rvci54ID0gKGNGYWN0b3IxZGl2NCAqIGNvbnZlcnRf
ZmxvYXQobm9ybWFsMkRWZWN0b3IueCkgKiBzdXJmYWNlU2NhbGUpOworIAlub3JtYWxWZWN0b3Iu
eSA9IChjRmFjdG9yMWRpdjQgKiBjb252ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLnkpICogc3Vy
ZmFjZVNjYWxlKTsKKyAJbm9ybWFsVmVjdG9yLnogPSAxLjBmOworIAkKKyAJZmxvYXQgbm9ybWFs
VmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RMZW5ndGgobm9ybWFsVmVjdG9yKTsKKyAJCisgCS8vVGhp
cyBsaW5lIFNIT1VMRCB3b3JrLCBidXQgaXMgYm9ndXMgZm9yIHNvbWUgcmVhc29uLi4uIFRoZSBz
YW1lIHRoaW5nIGlzIGFjaGlldmVkIHVuZGVybmVhdGggdXNpbmcgdGhlIGV4cGFuZGVkIHZlY3Rv
cjNERG90IHJvdXRpbmUuLi4KKyAJLy9saWdodFN0cmVuZ3RoID0gZGlmZnVzZUNvbnN0YW50ICog
dmVjdG9yM0REb3Qobm9ybWFsVmVjdG9yLCBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5v
cm1hbFZlY3Rvckxlbmd0aCAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgCQor
IAlsaWdodFN0cmVuZ3RoID0gZGlmZnVzZUNvbnN0YW50ICogKCBub3JtYWxWZWN0b3IueCAqIHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvci54ICsgbm9ybWFsVmVjdG9yLnkgKiBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3IueSAKKyAJKyBub3JtYWxWZWN0b3IueiAqIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci56ICkgLyAobm9ybWFsVmVjdG9yTGVuZ3RoKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JM
ZW5ndGgpOworIAkKKyAJbGlnaHRTdHJlbmd0aCA9IGNsYW1wKGxpZ2h0U3RyZW5ndGgsIDAuMGYs
IDEuMGYpOworIAkKKyAgICAgd3JrW29mZnNldF0gICAgID0gY29udmVydF91Y2hhcihsaWdodFN0
cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngpOworIAl3cmtbb2Zmc2V0ICsgMV0g
PSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iu
eSk7CisgCXdya1tvZmZzZXQgKyAyXSA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBh
aW50aW5nRGF0YS5jb2xvclZlY3Rvci56KTsKKyB9CisgCisgX19rZXJuZWwgdm9pZCBEaWZmdXNl
TGlnaHRpbmdTcG90TGlnaHQoX19nbG9iYWwgdWNoYXIqIHdyaywKKyAJCQkJCQkJCQkgICBQYWlu
dGluZ0RhdGFPQ0wgcGFpbnRpbmdEYXRhLAorIAkJCQkJCQkJCSAgIGludCB3aWR0aCwKKyAJCQkJ
CQkJCQkgICBmbG9hdCBzdXJmYWNlU2NhbGUsCisgCQkJCQkJCQkJICAgdWludCBib3VuZGFyeSwK
KyAJCQkJCQkJCQkgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCisgeworIAl1aW50IGluZGV4ID0g
Z2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj1ib3VuZGFyeSkKKyAJCXJldHVybjsKKyAK
KyAJaW50IG9mZnNldCA9IGNQaXhlbFNpemUgKiAoaW5kZXggKyB3aWR0aCArIDEgKyAoMiAqIChp
bmRleCAvICh3aWR0aCAtIDIpKSkpOworIAkKKyAJaW50IHkgPSAob2Zmc2V0IC8gY1BpeGVsU2l6
ZSkgLyB3aWR0aDsKKyAJaW50IHggPSAob2Zmc2V0IC8gY1BpeGVsU2l6ZSkgLSAod2lkdGggKiB5
KTsKKyAJaW50IHogPSB3cmtbb2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldF0gKiBzdXJmYWNl
U2NhbGU7CisgCQorIAlwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueCA9IChwYWludGluZ0RhdGEu
bGlnaHRTb3VyY2VQb3NpdGlvbi54IC0geCk7CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
ci55ID0gKHBhaW50aW5nRGF0YS5saWdodFNvdXJjZVBvc2l0aW9uLnkgLSB5KTsKKyAgICAgcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnogPSAocGFpbnRpbmdEYXRhLmxpZ2h0U291cmNlUG9zaXRp
b24ueiAtIHopOworICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGggPSB2ZWN0b3Iz
RExlbmd0aChwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpOworICAgICAKKyAgCWZsb2F0IGNvc2lu
ZU9mQW5nbGUgPSB2ZWN0b3IzRERvdChwYWludGluZ0RhdGEubGlnaHRWZWN0b3IsIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3IpIC8gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwor
ICAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpCisg
ICAgIHsKKyAgICAgICAgIC8vIE5vIGxpZ2h0IGlzIHByb2R1Y2VkLCBzY2FubGluZXMgYXJlIG5v
dCB1cGRhdGVkCisgICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueCA9IDAuMGY7Cisg
ICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSA9IDAuMGY7CisgICAgICAgICBwYWlu
dGluZ0RhdGEuY29sb3JWZWN0b3IueiA9IDAuMGY7CisgICAgIH0KKyAKKyAgICAgLy8gU2V0IHRo
ZSBjb2xvciBvZiB0aGUgcGl4ZWwKKyAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICAgbGln
aHRTdHJlbmd0aCA9IHBvdygtY29zaW5lT2ZBbmdsZSwgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQpOworIAorICAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0KQorICAgICAgICAgbGlnaHRTdHJlbmd0aCAqPSAocGFpbnRpbmdEYXRhLmNvbmVDdXRP
ZmZMaW1pdCAtIGNvc2luZU9mQW5nbGUpIC8gKHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
LSBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCk7CisgCisgICAgIGlmIChsaWdodFN0cmVuZ3Ro
ID4gMS4wZikKKyAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOworIAorICAgICBwYWludGlu
Z0RhdGEuY29sb3JWZWN0b3IueCA9IHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueCAq
IGxpZ2h0U3RyZW5ndGg7CisgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci55ID0gcGFpbnRp
bmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci55ICogbGlnaHRTdHJlbmd0aDsKKyAgICAgcGFpbnRp
bmdEYXRhLmNvbG9yVmVjdG9yLnogPSBwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnog
KiBsaWdodFN0cmVuZ3RoOworIAkKKyAJTXlJbnRQb2ludDJEIG5vcm1hbDJEVmVjdG9yOworIAlp
bnQgb2Zmc2V0X3RtcCA9IG9mZnNldDsKKyAJCisgCWludCBsZWZ0ICAgICAgICAgPSB3cmtbb2Zm
c2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHJpZ2h0
ICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXRdOworIAlvZmZzZXRfdG1wIC09IHdpZHRoICogY1BpeGVsU2l6ZTsKKyAJaW50IHRvcExlZnQg
ICAgICA9IHdya1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRd
OworIAlpbnQgdG9wICAgICAgICAgID0gd3JrW29mZnNldF90bXAgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0XTsKKyAJaW50IHRvcFJpZ2h0ICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1wICs9ICh3aWR0aCAqIGNQaXhlbFNp
emUpIDw8IDE7CisgCWludCBib3R0b21MZWZ0ICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IGJvdHRvbSAgICAgICA9IHdya1tvZmZz
ZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCBib3R0b21SaWdodCAgPSB3cmtb
b2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJbm9ybWFs
MkRWZWN0b3IueCA9ICgtdG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQg
PDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQpOworICAgICBub3JtYWwyRFZlY3Rvci55
ID0gKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIChib3R0
b20gPDwgMSkgKyBib3R0b21SaWdodCk7CisgICAgIAorIAlNeUZsb2F0UG9pbnQzRCBub3JtYWxW
ZWN0b3I7CisgCW5vcm1hbFZlY3Rvci54ID0gKGNGYWN0b3IxZGl2NCAqIGNvbnZlcnRfZmxvYXQo
bm9ybWFsMkRWZWN0b3IueCkgKiBzdXJmYWNlU2NhbGUpOworIAlub3JtYWxWZWN0b3IueSA9IChj
RmFjdG9yMWRpdjQgKiBjb252ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLnkpICogc3VyZmFjZVNj
YWxlKTsKKyAJbm9ybWFsVmVjdG9yLnogPSAxLjBmOworIAkKKyAJZmxvYXQgbm9ybWFsVmVjdG9y
TGVuZ3RoID0gdmVjdG9yM0RMZW5ndGgobm9ybWFsVmVjdG9yKTsKKyAJCisgCS8vVGhpcyBsaW5l
IFNIT1VMRCB3b3JrLCBidXQgaXMgYm9ndXMgZm9yIHNvbWUgcmVhc29uLi4uIFRoZSBzYW1lIHRo
aW5nIGlzIGFjaGlldmVkIHVuZGVybmVhdGggdXNpbmcgdGhlIGV4cGFuZGVkIHZlY3RvcjNERG90
IHJvdXRpbmUuLi4KKyAJLy9saWdodFN0cmVuZ3RoID0gZGlmZnVzZUNvbnN0YW50ICogdmVjdG9y
M0REb3Qobm9ybWFsVmVjdG9yLCBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgCQorIAlsaWdo
dFN0cmVuZ3RoID0gZGlmZnVzZUNvbnN0YW50ICogKCBub3JtYWxWZWN0b3IueCAqIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci54ICsgbm9ybWFsVmVjdG9yLnkgKiBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3IueSAKKyAJKyBub3JtYWxWZWN0b3IueiAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56
ICkgLyAobm9ybWFsVmVjdG9yTGVuZ3RoKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgp
OworIAkKKyAJbGlnaHRTdHJlbmd0aCA9IGNsYW1wKGxpZ2h0U3RyZW5ndGgsIDAuMGYsIDEuMGYp
OworIAkKKyAgICAgd3JrW29mZnNldF0gICAgID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3Ro
ICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngpOworIAl3cmtbb2Zmc2V0ICsgMV0gPSBjb252
ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSk7Cisg
CXdya1tvZmZzZXQgKyAyXSA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5n
RGF0YS5jb2xvclZlY3Rvci56KTsKKyB9CisgCisgX19rZXJuZWwgdm9pZCBEaWZmdXNlTGlnaHRp
bmdEaXN0YW50TGlnaHQoX19nbG9iYWwgdWNoYXIqIHdyaywKKyAJCQkJCQkJCQkJICBQYWludGlu
Z0RhdGFPQ0wgcGFpbnRpbmdEYXRhLAorIAkJCQkJCQkJCQkgIGludCB3aWR0aCwKKyAJCQkJCQkJ
CQkJICBmbG9hdCBzdXJmYWNlU2NhbGUsCisgCQkJCQkJCQkJCSAgdWludCBib3VuZGFyeSwKKyAJ
CQkJCQkJCQkJICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCisgeworIAl1aW50IGluZGV4ID0gZ2V0
X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj1ib3VuZGFyeSkKKyAJCXJldHVybjsKKyAKKyAJ
aW50IG9mZnNldCA9IGNQaXhlbFNpemUgKiAoaW5kZXggKyB3aWR0aCArIDEgKyAoMiAqIChpbmRl
eCAvICh3aWR0aCAtIDIpKSkpOworIAkKKyAJTXlJbnRQb2ludDJEIG5vcm1hbDJEVmVjdG9yOwor
IAlpbnQgb2Zmc2V0X3RtcCA9IG9mZnNldDsKKyAJCisgCWludCBsZWZ0ICAgICAgICAgPSB3cmtb
b2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHJp
Z2h0ICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXRdOworIAlvZmZzZXRfdG1wIC09IHdpZHRoICogY1BpeGVsU2l6ZTsKKyAJaW50IHRvcExl
ZnQgICAgICA9IHdya1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXRdOworIAlpbnQgdG9wICAgICAgICAgID0gd3JrW29mZnNldF90bXAgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0XTsKKyAJaW50IHRvcFJpZ2h0ICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1wICs9ICh3aWR0aCAqIGNQaXhl
bFNpemUpIDw8IDE7CisgCWludCBib3R0b21MZWZ0ICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IGJvdHRvbSAgICAgICA9IHdya1tv
ZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCBib3R0b21SaWdodCAgPSB3
cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJbm9y
bWFsMkRWZWN0b3IueCA9ICgtdG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmln
aHQgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQpOworICAgICBub3JtYWwyRFZlY3Rv
ci55ID0gKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIChi
b3R0b20gPDwgMSkgKyBib3R0b21SaWdodCk7CisgICAgICAgICAgICAgCisgICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7CisgICAgIAorIAlNeUZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgCW5v
cm1hbFZlY3Rvci54ID0gKGNGYWN0b3IxZGl2NCAqIGNvbnZlcnRfZmxvYXQobm9ybWFsMkRWZWN0
b3IueCkgKiBzdXJmYWNlU2NhbGUpOworIAlub3JtYWxWZWN0b3IueSA9IChjRmFjdG9yMWRpdjQg
KiBjb252ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLnkpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9y
bWFsVmVjdG9yLnogPSAxLjBmOworIAkKKyAJZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gdmVj
dG9yM0RMZW5ndGgobm9ybWFsVmVjdG9yKTsKKyAJCisgCS8vVGhpcyBsaW5lIFNIT1VMRCB3b3Jr
LCBidXQgaXMgYm9ndXMgZm9yIHNvbWUgcmVhc29uLi4uIFRoZSBzYW1lIHRoaW5nIGlzIGFjaGll
dmVkIHVuZGVybmVhdGggdXNpbmcgdGhlIGV4cGFuZGVkIHZlY3RvcjNERG90IHJvdXRpbmUuLi4K
KyAJLy9saWdodFN0cmVuZ3RoID0gZGlmZnVzZUNvbnN0YW50ICogdmVjdG9yM0REb3Qobm9ybWFs
VmVjdG9yLCBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAq
IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgCQorIAlsaWdodFN0cmVuZ3RoID0g
ZGlmZnVzZUNvbnN0YW50ICogKCBub3JtYWxWZWN0b3IueCAqIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci54ICsgbm9ybWFsVmVjdG9yLnkgKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueSAKKyAJ
KyBub3JtYWxWZWN0b3IueiAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56ICkgLyAobm9ybWFs
VmVjdG9yTGVuZ3RoKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOworIAkKKyAJbGln
aHRTdHJlbmd0aCA9IGNsYW1wKGxpZ2h0U3RyZW5ndGgsIDAuMGYsIDEuMGYpOworIAkKKyAgICAg
d3JrW29mZnNldF0gICAgID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdE
YXRhLmNvbG9yVmVjdG9yLngpOworIAl3cmtbb2Zmc2V0ICsgMV0gPSBjb252ZXJ0X3VjaGFyKGxp
Z2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSk7CisgCXdya1tvZmZzZXQg
KyAyXSA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZl
Y3Rvci56KTsKKyB9CisgCisgX19rZXJuZWwgdm9pZCBTcGVjdWxhckxpZ2h0aW5nUG9pbnRMaWdo
dChfX2dsb2JhbCB1Y2hhciogd3JrLAorIAkJCQkJCQkJCQkgUGFpbnRpbmdEYXRhT0NMIHBhaW50
aW5nRGF0YSwKKyAJCQkJCQkJICAJCQkgaW50IHdpZHRoLAorIAkJCQkJCQkJCQkgZmxvYXQgc3Vy
ZmFjZVNjYWxlLAorIAkJCQkJCQkgICAJCQkgdWludCBib3VuZGFyeSwKKyAJCQkJCQkJICAgCQkJ
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsCisgCQkJCQkJCSAgIAkJCSBmbG9hdCBzcGVjdWxhckV4
cG9uZW50KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4
ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAorIAlpbnQgb2Zmc2V0ID0gIGNQaXhlbFNpemUg
KiAoaW5kZXggKyB3aWR0aCArIDEgKyAoMiAqIChpbmRleCAvICh3aWR0aCAtIDIpKSkpOworIAkK
KyAJaW50IHkgPSAob2Zmc2V0IC8gY1BpeGVsU2l6ZSkgLyB3aWR0aDsKKyAJaW50IHggPSAob2Zm
c2V0IC8gY1BpeGVsU2l6ZSkgLSAod2lkdGggKiB5KTsKKyAJaW50IHogPSB3cmtbb2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldF0gKiBzdXJmYWNlU2NhbGU7CisgCQorIAlwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3IueCA9IChwYWludGluZ0RhdGEubGlnaHRTb3VyY2VQb3NpdGlvbi54IC0geCk7
CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci55ID0gKHBhaW50aW5nRGF0YS5saWdodFNv
dXJjZVBvc2l0aW9uLnkgLSB5KTsKKyAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnogPSAo
cGFpbnRpbmdEYXRhLmxpZ2h0U291cmNlUG9zaXRpb24ueiAtIHopOworICAgICBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3JMZW5ndGggPSB2ZWN0b3IzRExlbmd0aChwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3IpOworIAkKKyAJTXlJbnRQb2ludDJEIG5vcm1hbDJEVmVjdG9yOworIAlpbnQgb2Zmc2V0
X3RtcCA9IG9mZnNldDsKKyAJCisgCWludCBsZWZ0ICAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAt
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHJpZ2h0ICAgICAgICA9
IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlv
ZmZzZXRfdG1wIC09IHdpZHRoICogY1BpeGVsU2l6ZTsKKyAJaW50IHRvcExlZnQgICAgICA9IHdy
a1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQg
dG9wICAgICAgICAgID0gd3JrW29mZnNldF90bXAgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJ
aW50IHRvcFJpZ2h0ICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1wICs9ICh3aWR0aCAqIGNQaXhlbFNpemUpIDw8IDE7
CisgCWludCBib3R0b21MZWZ0ICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IGJvdHRvbSAgICAgICA9IHdya1tvZmZzZXRfdG1wICsg
Y0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCBib3R0b21SaWdodCAgPSB3cmtbb2Zmc2V0X3Rt
cCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJbm9ybWFsMkRWZWN0b3Iu
eCA9ICgtdG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBi
b3R0b21MZWZ0ICsgYm90dG9tUmlnaHQpOworICAgICBub3JtYWwyRFZlY3Rvci55ID0gKC10b3BM
ZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIChib3R0b20gPDwgMSkg
KyBib3R0b21SaWdodCk7CisgICAgICAgICAKKyAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAg
ICAgCisgCU15RmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvcjsKKyAJbm9ybWFsVmVjdG9yLnggPSAo
Y0ZhY3RvcjFkaXY0ICogY29udmVydF9mbG9hdChub3JtYWwyRFZlY3Rvci54KSAqIHN1cmZhY2VT
Y2FsZSk7CisgCW5vcm1hbFZlY3Rvci55ID0gKGNGYWN0b3IxZGl2NCAqIGNvbnZlcnRfZmxvYXQo
bm9ybWFsMkRWZWN0b3IueSkgKiBzdXJmYWNlU2NhbGUpOworIAlub3JtYWxWZWN0b3IueiA9IDEu
MGY7CisgCQorIAlmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSB2ZWN0b3IzRExlbmd0aChub3Jt
YWxWZWN0b3IpOworIAkKKyAJTXlGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvcjsKKyAJaGFsZndh
eVZlY3Rvci54ID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLng7CisgCWhhbGZ3YXlWZWN0b3Iu
eSA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci55OworIAloYWxmd2F5VmVjdG9yLnogPSBwYWlu
dGluZ0RhdGEubGlnaHRWZWN0b3IueiArIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsK
KyAJCisgCWZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSB2ZWN0b3IzRExlbmd0aChoYWxmd2F5
VmVjdG9yKTsKKyAKKyAJbGlnaHRTdHJlbmd0aCA9IHNwZWN1bGFyQ29uc3RhbnQgKiBwb3codmVj
dG9yM0REb3Qobm9ybWFsVmVjdG9yLCBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5n
dGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgc3BlY3VsYXJFeHBvbmVudCk7CisgCQkKKyAJbGln
aHRTdHJlbmd0aCA9IGNsYW1wKGxpZ2h0U3RyZW5ndGgsIDAuMGYsIDEuMGYpOworIAorIAl3cmtb
b2Zmc2V0XSAgICAgPSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEu
Y29sb3JWZWN0b3IueCk7CisgCXdya1tvZmZzZXQgKyAxXSA9IGNvbnZlcnRfdWNoYXIobGlnaHRT
dHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci55KTsKKyAJd3JrW29mZnNldCArIDJd
ID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9y
LnopOworIH0KKyAKKyBfX2tlcm5lbCB2b2lkIFNwZWN1bGFyTGlnaHRpbmdTcG90TGlnaHQoX19n
bG9iYWwgdWNoYXIqIHdyaywKKyAJCQkJCQkJCQkJIFBhaW50aW5nRGF0YU9DTCBwYWludGluZ0Rh
dGEsCisgCQkJCQkJCSAgCQkJIGludCB3aWR0aCwKKyAJCQkJCQkJCQkJIGZsb2F0IHN1cmZhY2VT
Y2FsZSwKKyAJCQkJCQkJICAgCQkJIHVpbnQgYm91bmRhcnksCisgCQkJCQkJCSAgIAkJCSBmbG9h
dCBzcGVjdWxhckNvbnN0YW50LAorIAkJCQkJCQkgICAJCQkgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCkKKyB7CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+PSBi
b3VuZGFyeSkKKyAJCXJldHVybjsKKyAKKyAJaW50IG9mZnNldCA9ICBjUGl4ZWxTaXplICogKGlu
ZGV4ICsgd2lkdGggKyAxICsgKDIgKiAoaW5kZXggLyAod2lkdGggLSAyKSkpKTsKKyAJCisgCWlu
dCB5ID0gKG9mZnNldCAvIGNQaXhlbFNpemUpIC8gd2lkdGg7CisgCWludCB4ID0gKG9mZnNldCAv
IGNQaXhlbFNpemUpIC0gKHdpZHRoICogeSk7CisgCWludCB6ID0gd3JrW29mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXRdICogc3VyZmFjZVNjYWxlOworIAkKKyAJcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnggPSAocGFpbnRpbmdEYXRhLmxpZ2h0U291cmNlUG9zaXRpb24ueCAtIHgpOworICAg
ICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueSA9IChwYWludGluZ0RhdGEubGlnaHRTb3VyY2VQ
b3NpdGlvbi55IC0geSk7CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56ID0gKHBhaW50
aW5nRGF0YS5saWdodFNvdXJjZVBvc2l0aW9uLnogLSB6KTsKKyAgICAgcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RMZW5ndGgocGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
KTsKKyAJCisgCWZsb2F0IGNvc2luZU9mQW5nbGUgPSB2ZWN0b3IzRERvdChwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3IsIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3IpIC8gcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yTGVuZ3RoOworICAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0
YS5jb25lQ3V0T2ZmTGltaXQpCisgICAgIHsKKyAgICAgICAgIC8vIE5vIGxpZ2h0IGlzIHByb2R1
Y2VkLCBzY2FubGluZXMgYXJlIG5vdCB1cGRhdGVkCisgICAgICAgICBwYWludGluZ0RhdGEuY29s
b3JWZWN0b3IueCA9IDAuMGY7CisgICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSA9
IDAuMGY7CisgICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueiA9IDAuMGY7CisgICAg
IH0KKyAKKyAgICAgLy8gU2V0IHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwKKyAgICAgZmxvYXQgbGln
aHRTdHJlbmd0aDsKKyAgICAgbGlnaHRTdHJlbmd0aCA9IHBvdygtY29zaW5lT2ZBbmdsZSwgcGFp
bnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQpOworIAorICAgICBpZiAoY29zaW5lT2ZBbmdsZSA+
IHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0KQorICAgICAgICAgbGlnaHRTdHJlbmd0aCAqPSAo
cGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGNvc2luZU9mQW5nbGUpIC8gKHBhaW50aW5n
RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCk7CisgCisg
ICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMS4wZikKKyAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAx
LjBmOworIAorICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueCA9IHBhaW50aW5nRGF0YS5w
cml2YXRlQ29sb3JWZWN0b3IueCAqIGxpZ2h0U3RyZW5ndGg7CisgICAgIHBhaW50aW5nRGF0YS5j
b2xvclZlY3Rvci55ID0gcGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci55ICogbGlnaHRT
dHJlbmd0aDsKKyAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnogPSBwYWludGluZ0RhdGEu
cHJpdmF0ZUNvbG9yVmVjdG9yLnogKiBsaWdodFN0cmVuZ3RoOworIAkKKyAJTXlJbnRQb2ludDJE
IG5vcm1hbDJEVmVjdG9yOworIAlpbnQgb2Zmc2V0X3RtcCA9IG9mZnNldDsKKyAJCisgCWludCBs
ZWZ0ICAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0XTsKKyAJaW50IHJpZ2h0ICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1wIC09IHdpZHRoICogY1BpeGVs
U2l6ZTsKKyAJaW50IHRvcExlZnQgICAgICA9IHdya1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgdG9wICAgICAgICAgID0gd3JrW29mZnNldF90
bXAgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHRvcFJpZ2h0ICAgICA9IHdya1tvZmZz
ZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1w
ICs9ICh3aWR0aCAqIGNQaXhlbFNpemUpIDw8IDE7CisgCWludCBib3R0b21MZWZ0ICAgPSB3cmtb
b2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IGJv
dHRvbSAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWlu
dCBib3R0b21SaWdodCAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0XTsKKyAJbm9ybWFsMkRWZWN0b3IueCA9ICgtdG9wTGVmdCArIHRvcFJpZ2h0IC0g
KGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQpOwor
ICAgICBub3JtYWwyRFZlY3Rvci55ID0gKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0
ICsgYm90dG9tTGVmdCArIChib3R0b20gPDwgMSkgKyBib3R0b21SaWdodCk7CisgICAgIAorIAlN
eUZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgCW5vcm1hbFZlY3Rvci54ID0gKGNGYWN0b3Ix
ZGl2NCAqIGNvbnZlcnRfZmxvYXQobm9ybWFsMkRWZWN0b3IueCkgKiBzdXJmYWNlU2NhbGUpOwor
IAlub3JtYWxWZWN0b3IueSA9IChjRmFjdG9yMWRpdjQgKiBjb252ZXJ0X2Zsb2F0KG5vcm1hbDJE
VmVjdG9yLnkpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9ybWFsVmVjdG9yLnogPSAxLjBmOworIAkK
KyAJZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RMZW5ndGgobm9ybWFsVmVjdG9y
KTsKKyAJCisgCU15RmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3I7CisgCWhhbGZ3YXlWZWN0b3Iu
eCA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci54OworIAloYWxmd2F5VmVjdG9yLnkgPSBwYWlu
dGluZ0RhdGEubGlnaHRWZWN0b3IueTsKKyAJaGFsZndheVZlY3Rvci56ID0gcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yLnogKyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgCQorIAlm
bG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RMZW5ndGgoaGFsZndheVZlY3Rvcik7
CisgCisgCWxpZ2h0U3RyZW5ndGggPSBzcGVjdWxhckNvbnN0YW50ICogcG93KHZlY3RvcjNERG90
KG5vcm1hbFZlY3RvciwgaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFs
ZndheVZlY3Rvckxlbmd0aCksIHNwZWN1bGFyRXhwb25lbnQpOworIAkJCisgCWxpZ2h0U3RyZW5n
dGggPSBjbGFtcChsaWdodFN0cmVuZ3RoLCAwLjBmLCAxLjBmKTsKKyAKKyAJd3JrW29mZnNldF0g
ICAgID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVj
dG9yLngpOworIAl3cmtbb2Zmc2V0ICsgMV0gPSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGgg
KiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSk7CisgCXdya1tvZmZzZXQgKyAyXSA9IGNvbnZl
cnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56KTsKKyB9
CisgCisgX19rZXJuZWwgdm9pZCBTcGVjdWxhckxpZ2h0aW5nRGlzdGFudExpZ2h0KF9fZ2xvYmFs
IHVjaGFyKiB3cmssCisgCQkJCQkJCQkJCSBQYWludGluZ0RhdGFPQ0wgcGFpbnRpbmdEYXRhLAor
IAkJCQkJCQkgIAkJCSBpbnQgd2lkdGgsCisgCQkJCQkJCQkJCSBmbG9hdCBzdXJmYWNlU2NhbGUs
CisgCQkJCQkJCSAgIAkJCSB1aW50IGJvdW5kYXJ5LAorIAkJCQkJCQkgICAJCQkgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudCwKKyAJCQkJCQkJICAgCQkJIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCisg
eworIAl1aW50IGluZGV4ID0gZ2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91bmRh
cnkpCisgCQlyZXR1cm47CisgCisgCWludCBvZmZzZXQgPSAgY1BpeGVsU2l6ZSAqIChpbmRleCAr
IHdpZHRoICsgMSArICgyICogKGluZGV4IC8gKHdpZHRoIC0gMikpKSk7CisgCQorIAlNeUludFBv
aW50MkQgbm9ybWFsMkRWZWN0b3I7CisgCWludCBvZmZzZXRfdG1wID0gb2Zmc2V0OworIAkKKyAJ
aW50IGxlZnQgICAgICAgICA9IHdya1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXRdOworIAlpbnQgcmlnaHQgICAgICAgID0gd3JrW29mZnNldF90bXAgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCW9mZnNldF90bXAgLT0gd2lkdGggKiBj
UGl4ZWxTaXplOworIAlpbnQgdG9wTGVmdCAgICAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCB0b3AgICAgICAgICAgPSB3cmtbb2Zm
c2V0X3RtcCArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgdG9wUmlnaHQgICAgID0gd3Jr
W29mZnNldF90bXAgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCW9mZnNl
dF90bXAgKz0gKHdpZHRoICogY1BpeGVsU2l6ZSkgPDwgMTsKKyAJaW50IGJvdHRvbUxlZnQgICA9
IHdya1tvZmZzZXRfdG1wIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlp
bnQgYm90dG9tICAgICAgID0gd3JrW29mZnNldF90bXAgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsK
KyAJaW50IGJvdHRvbVJpZ2h0ICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXRdOworIAlub3JtYWwyRFZlY3Rvci54ID0gKC10b3BMZWZ0ICsgdG9wUmln
aHQgLSAobGVmdCA8PCAxKSArIChyaWdodCA8PCAxKSAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdo
dCk7CisgICAgIG5vcm1hbDJEVmVjdG9yLnkgPSAoLXRvcExlZnQgLSAodG9wIDw8IDEpIC0gdG9w
UmlnaHQgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSArIGJvdHRvbVJpZ2h0KTsKKyAgICAg
ICAgIAorICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgICAKKyAJTXlGbG9hdFBvaW50M0Qg
bm9ybWFsVmVjdG9yOworIAlub3JtYWxWZWN0b3IueCA9IChjRmFjdG9yMWRpdjQgKiBjb252ZXJ0
X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLngpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9ybWFsVmVjdG9y
LnkgPSAoY0ZhY3RvcjFkaXY0ICogY29udmVydF9mbG9hdChub3JtYWwyRFZlY3Rvci55KSAqIHN1
cmZhY2VTY2FsZSk7CisgCW5vcm1hbFZlY3Rvci56ID0gMS4wZjsKKyAJCisgCWZsb2F0IG5vcm1h
bFZlY3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKG5vcm1hbFZlY3Rvcik7CisgCQorIAlNeUZs
b2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yOworIAloYWxmd2F5VmVjdG9yLnggPSBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3IueDsKKyAJaGFsZndheVZlY3Rvci55ID0gcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnk7CisgCWhhbGZ3YXlWZWN0b3IueiA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56
ICsgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOworIAkKKyAJZmxvYXQgaGFsZndheVZl
Y3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKGhhbGZ3YXlWZWN0b3IpOworIAorIAlsaWdodFN0
cmVuZ3RoID0gc3BlY3VsYXJDb25zdGFudCAqIHBvdyh2ZWN0b3IzRERvdChub3JtYWxWZWN0b3Is
IGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5n
dGgpLCBzcGVjdWxhckV4cG9uZW50KTsKKyAJCQorIAlsaWdodFN0cmVuZ3RoID0gY2xhbXAobGln
aHRTdHJlbmd0aCwgMC4wZiwgMS4wZik7CisgCisgCXdya1tvZmZzZXRdICAgICA9IGNvbnZlcnRf
dWNoYXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KTsKKyAJd3Jr
W29mZnNldCArIDFdID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRh
LmNvbG9yVmVjdG9yLnkpOworIAl3cmtbb2Zmc2V0ICsgMl0gPSBjb252ZXJ0X3VjaGFyKGxpZ2h0
U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iueik7CisgfQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRU1vcnBob2xvZ3ku
Y2wgd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvb2NsL2tlcm5lbHMvRkVNb3JwaG9sb2d5LmNsCioqKiBvcmlnaW5hbC9X
ZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2Ns
L2tlcm5lbHMvRkVNb3JwaG9sb2d5LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCi0tLSB3ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRU1vcnBob2xvZ3kuY2wJMjAxMS0xMS0y
NCAxODowMDowMy42NTA5NTAwOTYgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAwICoqKioKLS0t
IDEsNjMgLS0tLQorIF9fa2VybmVsIHZvaWQgTW9ycGhSZWdpb25BcHBseShfX2dsb2JhbCB1Y2hh
ciogaW5EYXRhLCBfX2dsb2JhbCAgdWNoYXIqIG91dERhdGEsIAorIHVpbnQgd2lkdGgsIHVpbnQg
aGVpZ2h0LHVpbnQgcmFkaXVzWCwgdWludCByYWRpdXNZLCB1aW50IG1vZGUpCisgeworIAl1aW50
IGdsb2JhbF9pbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmIChnbG9iYWxfaW5kZXggPj0g
TlVNX0tFUk5FTFMpIHJldHVybjsKKyAKKyAJaW50IHN0YXJ0WTsKKyAJaW50IGVuZFk7CisgCWlu
dCBwb2ludFgsIHBvaW50WSwgeCwgeSwgaTsKKyAJaW50IHBvc19waXhlbDsKKyAJaW50IGNvbDsK
KyAJaW50IGV4dHJlbWFfaG9yaXpvbnRhbFtNQVhfSE9SSVpPTlRBTF9CVUZGRVJfU0laRV07Cisg
CWludCBleHRyZW1hQ29sdW1uOworIAlpbnQgZW50aXJlRXh0cmVtYTsKKyAJaW50IGFjdHVhbF9w
aXhlbDsKKyAJaW50IGFjdHVhbFN0YXJ0WSwgYWN0dWFsRW5kWTsKKyAJaW50IGFjdHVhbFN0YXJ0
WCwgYWN0dWFsRW5kWDsKKyAKKyAJaW50IGhvcml6b250YWxfaW5kZXggPSAwOworIAkKKyAJaWYg
KGdsb2JhbF9pbmRleCA8IE5VTV9LRVJORUxTLTEpIHsKKyAJCXN0YXJ0WSA9IGdsb2JhbF9pbmRl
eCAqIGhlaWdodC9OVU1fS0VSTkVMUzsKKyAJCWVuZFkgPSAoZ2xvYmFsX2luZGV4KzEpICogaGVp
Z2h0L05VTV9LRVJORUxTOworIAl9IGVsc2UgeworIAkJc3RhcnRZID0gZ2xvYmFsX2luZGV4ICog
aGVpZ2h0L05VTV9LRVJORUxTOworIAkJZW5kWSA9IGhlaWdodDsKKyAJfQorIAorIAlmb3IgKHBv
aW50WSA9IHN0YXJ0WTsgcG9pbnRZIDwgZW5kWTsgcG9pbnRZKyspIHsKKyAJCWZvciAocG9pbnRY
ID0gMDsgcG9pbnRYIDwgd2lkdGg7IHBvaW50WCsrKSB7CisgCQkJYWN0dWFsU3RhcnRZID0gKHBv
aW50WSAtIHJhZGl1c1kpIDwgMCA/IDAgOiAocG9pbnRZIC0gcmFkaXVzWSk7CisgCQkJYWN0dWFs
RW5kWSA9IChwb2ludFkgKyByYWRpdXNZKSA+IGhlaWdodCA/IGhlaWdodCA6KHBvaW50WSArIHJh
ZGl1c1kpOworIAkJCWFjdHVhbFN0YXJ0WCA9IChwb2ludFggLSByYWRpdXNYKSA8IDAgPyAwIDog
KHBvaW50WCAtIHJhZGl1c1gpOworIAkJCWFjdHVhbEVuZFggPSAocG9pbnRYICsgcmFkaXVzWCkg
PiB3aWR0aCA/IHdpZHRoIDogKHBvaW50WCArIHJhZGl1c1gpOworIAkJCWZvciAoY29sID0gMDsg
Y29sIDwgNCA7IGNvbCArKyApIHsKKyAJCQkJaG9yaXpvbnRhbF9pbmRleCA9IDA7CisgCQkJCWZv
ciAoeCA9IGFjdHVhbFN0YXJ0WDsgeCA8IGFjdHVhbEVuZFg7IHggKyspIHsKKyAJCQkJCWV4dHJl
bWFDb2x1bW4gPSBpbkRhdGFbYWN0dWFsU3RhcnRZICogd2lkdGggKiA0ICsgeCAqIDQgKyBjb2xd
OworIAorIAkJCQkJZm9yICh5ID0gYWN0dWFsU3RhcnRZICsgMTsgeTxhY3R1YWxFbmRZOyB5Kysp
IHsKKyAJCQkJCQlhY3R1YWxfcGl4ZWwgPSBpbkRhdGFbeSAqIHdpZHRoICogNCArIHggKiA0ICsg
Y29sXTsKKyAJCQkJCQlpZiAoKChtb2RlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkg
JiYgKGFjdHVhbF9waXhlbCA8PSBleHRyZW1hQ29sdW1uKSkgfHwKKyAJCQkJCQkJCSgobW9kZSA9
PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFKSAmJiAoYWN0dWFsX3BpeGVsID49IGV4dHJl
bWFDb2x1bW4pKSkgeworIAkJCQkJCQlleHRyZW1hQ29sdW1uID0gYWN0dWFsX3BpeGVsOworIAkJ
CQkJCX0KKyAJCQkJCX0KKyAJCQkJCWV4dHJlbWFfaG9yaXpvbnRhbFtob3Jpem9udGFsX2luZGV4
XSA9IGV4dHJlbWFDb2x1bW47CisgCQkJCQlob3Jpem9udGFsX2luZGV4Kys7CisgCQkJCX0KKyAJ
CQkJZW50aXJlRXh0cmVtYSA9IGV4dHJlbWFfaG9yaXpvbnRhbFswXTsKKyAJCQkJZm9yIChpID0g
MTsgaSA8IGhvcml6b250YWxfaW5kZXg7IGkrKykgeworIAkJCQkJaWYgKCgobW9kZSA9PSBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpICYmIChleHRyZW1hX2hvcml6b250YWxbaV0gPD0gZW50
aXJlRXh0cmVtYSkpIHx8CisgCQkJCQkJCSgobW9kZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
RElMQVRFKSAmJiAoZXh0cmVtYV9ob3Jpem9udGFsW2ldID49IGVudGlyZUV4dHJlbWEpKSkgewor
IAkJCQkJCWVudGlyZUV4dHJlbWEgPSBleHRyZW1hX2hvcml6b250YWxbaV07CisgCQkJCQl9Cisg
CQkJCX0KKyAJCQkJb3V0RGF0YVtwb2ludFkgKiB3aWR0aCAqIDQgKyBwb2ludFggKiA0ICsgY29s
XSA9IGVudGlyZUV4dHJlbWE7CisgCQkJfQorIAkJfQorIAl9CisgfQorIAorIAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117378</attachid>
            <date>2011-12-01 01:31:24 -0800</date>
            <delta_ts>2011-12-01 01:31:24 -0800</delta_ts>
            <desc>Additional patch to the OpenCL filter patches posted earlier by Giulio Urlini</desc>
            <filename>blur_copyright.patch</filename>
            <type>text/plain</type>
            <size>1575</size>
            <attacher name="Surinder-Pal Singh">srplsnh</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IGY0
MzAzZmEuLjQ1ZDMwYzMgMTAwNjQ0Ci0tLSBhL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvV2ViS2l0
LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcApAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEs
IFMuTC4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0
cm9uaWNzIC0gQXV0aG9yczogRGF2aWQgQ29yaWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1
cmluZGVyIFBhbCBTaW5naCA8c3VyaW5kZXItcGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxp
bmkgPGdpdWxpby51cmxpbmlAc3QuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTkzLTIwMTAgTlZJ
RElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBzb2Z0d2FyZSBjb250
YWlucyBzb3VyY2UgY29kZSBwcm92aWRlZCBieSBOVklESUEgQ29ycG9yYXRpb24uIAogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL2tlcm5lbHMvRkVHYXVzc2lhbkJsdXJPQ0wuY2wg
Yi9XZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
b2NsL2tlcm5lbHMvRkVHYXVzc2lhbkJsdXJPQ0wuY2wKaW5kZXggZTE4ZjA3My4uMTc1NjYwZiAx
MDA2NDQKLS0tIGEvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFR2F1c3NpYW5CbHVyT0NMLmNsCisrKyBiL1dlYktpdC1y
OTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVs
cy9GRUdhdXNzaWFuQmx1ck9DTC5jbApAQCAtMSwzICsxLDkgQEAKKy8qIAorQ29weXJpZ2h0IDE5
OTMtMjAxMCBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHNv
ZnR3YXJlIGNvbnRhaW5zIHNvdXJjZSBjb2RlIHByb3ZpZGVkIGJ5IE5WSURJQSBDb3Jwb3JhdGlv
bi4gCisqLworCisKKwogZmxvYXQ0IHJnYmFVaW50VG9GbG9hdDQoY29uc3QgdW5zaWduZWQgaW50
IHVpUGFja2VkUkdCQSkKIHsKICAgICBmbG9hdDQgcmdiYTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117584</attachid>
            <date>2011-12-02 00:41:12 -0800</date>
            <delta_ts>2011-12-02 00:41:12 -0800</delta_ts>
            <desc>OCL kernels for modified SVG filters</desc>
            <filename>ocl_kernels_added.patch</filename>
            <type>text/plain</type>
            <size>38874</size>
            <attacher name="Giulio Urlini">sentangeleyes</attacher>
            
              <data encoding="base64">ZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUJsZW5kT0NMLmNsIHdlYmtpdF9vcGVuY2wv
V2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29j
bC9rZXJuZWxzL0ZFQmxlbmRPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUJsZW5kT0NM
LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRUJsZW5kT0NMLmNsCTIwMTEtMTItMDIgMDg6MzE6NDMuMjg3Mzc2MTAxICsw
MTAwCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDExNSAtLS0tCisgLyoKKyAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1dGhvcnM6IERhdmlkIENv
cmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwgU2luZ2ggPHN1cmluZGVy
LXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8udXJsaW5pQHN0LmNvbT4K
KyAgKgorICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgKgorICAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgICovCisgCisgX19rZXJuZWwgdm9pZCBOb3JtYWxCbGVuZChfX2dsb2JhbCB1Y2hh
cjQqIGluQSxfX2dsb2JhbCAgdWNoYXI0KiBpbkIsX19nbG9iYWwgIHVjaGFyNCogb3V0LCB1aW50
IGJvdW5kYXJ5KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGlu
ZGV4ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAkJCQorIAlmbG9hdDQgQSA9IGNvbnZlcnRf
ZmxvYXQ0KGluQVtpbmRleF0pOworIAlmbG9hdDQgQiA9IGNvbnZlcnRfZmxvYXQ0KGluQltpbmRl
eF0pOworIAlmbG9hdDQgTzsKKyAJZmxvYXQgYWxwaGEgPSBBLncgLyAyNTUuMGY7CisgCQorIAlP
LnggPSAoKDEuMGYgLSBhbHBoYSkgKiBCLnggKyBBLngpOworIAlPLnkgPSAoKDEuMGYgLSBhbHBo
YSkgKiBCLnkgKyBBLnkpOworIAlPLnogPSAoKDEuMGYgLSBhbHBoYSkgKiBCLnogKyBBLnopOwor
IAlPLncgPSAoMS4wZiAtICgoMS4wZiAtIGFscGhhKSAqICgxLjBmIC0gQi53IC8gMjU1LjBmKSkp
ICogMjU1LjBmOworIAkKKyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KE8pOworIH0KKyAK
KyBfX2tlcm5lbCB2b2lkIE11bHRpcGx5QmxlbmQoX19nbG9iYWwgdWNoYXI0KiBpbkEsX19nbG9i
YWwgIHVjaGFyNCogaW5CLF9fZ2xvYmFsICB1Y2hhcjQqIG91dCwgdWludCBib3VuZGFyeSkKKyB7
CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+PSBib3VuZGFy
eSkKKyAJCXJldHVybjsKKyAJCisgCWZsb2F0NCBBID0gY29udmVydF9mbG9hdDQoaW5BW2luZGV4
XSk7CisgCWZsb2F0NCBCID0gY29udmVydF9mbG9hdDQoaW5CW2luZGV4XSk7CisgCWZsb2F0NCBP
OworIAlmbG9hdCBhbHBoYTEgPSBBLncgLyAyNTUuMGY7CisgCWZsb2F0IGFscGhhMiA9IEIudyAv
IDI1NS4wZjsKKyAJCisgCU8ueCA9ICgoMS4wZiAtIGFscGhhMSkgKiBCLnggKyAoMS4wZiAtIGFs
cGhhMiArIEIueCAvIDI1NS4wZikgKiBBLngpOworIAlPLnkgPSAoKDEuMGYgLSBhbHBoYTEpICog
Qi55ICsgKDEuMGYgLSBhbHBoYTIgKyBCLnkgLyAyNTUuMGYpICogQS55KTsKKyAJTy56ID0gKCgx
LjBmIC0gYWxwaGExKSAqIEIueiArICgxLjBmIC0gYWxwaGEyICsgQi56IC8gMjU1LjBmKSAqIEEu
eik7CisgCU8udyA9ICgxLjBmIC0gKCgxLjBmIC0gYWxwaGExKSAqICgxLjBmIC0gYWxwaGEyKSkp
ICogMjU1LjBmOworIAkKKyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KE8pOworIH0KKyAK
KyBfX2tlcm5lbCB2b2lkIFNjcmVlbkJsZW5kKF9fZ2xvYmFsIHVjaGFyNCogaW5BLF9fZ2xvYmFs
ICB1Y2hhcjQqIGluQixfX2dsb2JhbCAgdWNoYXI0KiBvdXQsIHVpbnQgYm91bmRhcnkpCisgewor
IAl1aW50IGluZGV4ID0gZ2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91bmRhcnkp
CisgCQlyZXR1cm47CisgCQorIAlmbG9hdDQgQSA9IGNvbnZlcnRfZmxvYXQ0KGluQVtpbmRleF0p
OworIAlmbG9hdDQgQiA9IGNvbnZlcnRfZmxvYXQ0KGluQltpbmRleF0pOworIAlmbG9hdDQgTzsK
KyAJCisgCU8ueCA9ICgoQi54ICsgQS54KSAtIChBLnggKiBCLngpIC8gMjU1LjBmKTsKKyAJTy55
ID0gKChCLnkgKyBBLnkpIC0gKEEueSAqIEIueSkgLyAyNTUuMGYpOworIAlPLnogPSAoKEIueiAr
IEEueikgLSAoQS56ICogQi56KSAvIDI1NS4wZik7CisgCU8udyA9ICgxLjBmIC0gKCgxLjBmIC0g
QS53IC8gMjU1LjBmKSAqICgxLjBmIC0gQi53IC8gMjU1LjBmKSkpICogMjU1LjBmOworIAkKKyAJ
b3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KE8pOworIH0KKyAKKyBfX2tlcm5lbCB2b2lkIERh
cmtlbkJsZW5kKF9fZ2xvYmFsIHVjaGFyNCogaW5BLF9fZ2xvYmFsICB1Y2hhcjQqIGluQixfX2ds
b2JhbCAgdWNoYXI0KiBvdXQsIHVpbnQgYm91bmRhcnkpCisgeworIAl1aW50IGluZGV4ID0gZ2V0
X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91bmRhcnkpCisgCQlyZXR1cm47CisgCQor
IAlmbG9hdDQgQSA9IGNvbnZlcnRfZmxvYXQ0KGluQVtpbmRleF0pOworIAlmbG9hdDQgQiA9IGNv
bnZlcnRfZmxvYXQ0KGluQltpbmRleF0pOworIAlmbG9hdDQgTzsKKyAJZmxvYXQgYWxwaGExID0g
QS53IC8gMjU1LjBmOworIAlmbG9hdCBhbHBoYTIgPSBCLncgLyAyNTUuMGY7CisgCQorIAlPLngg
PSAobWluKCgxLjBmIC0gYWxwaGExKSAqIEIueCArIEEueCwgKDEuMGYgLSBhbHBoYTIpICogQS54
ICsgQi54KSk7CisgCU8ueSA9IChtaW4oKDEuMGYgLSBhbHBoYTEpICogQi55ICsgQS55LCAoMS4w
ZiAtIGFscGhhMikgKiBBLnkgKyBCLnkpKTsKKyAJTy56ID0gKG1pbigoMS4wZiAtIGFscGhhMSkg
KiBCLnogKyBBLnosICgxLjBmIC0gYWxwaGEyKSAqIEEueiArIEIueikpOworIAlPLncgPSAoMS4w
ZiAtICgoMS4wZiAtIGFscGhhMSkgKiAoMS4wZiAtIGFscGhhMikpKSAqIDI1NS4wZjsKKyAJCisg
CW91dFtpbmRleF0gPSBjb252ZXJ0X3VjaGFyNChPKTsKKyB9CisgCisgX19rZXJuZWwgdm9pZCBM
aWdodGVuQmxlbmQoX19nbG9iYWwgdWNoYXI0KiBpbkEsX19nbG9iYWwgIHVjaGFyNCogaW5CLF9f
Z2xvYmFsICB1Y2hhcjQqIG91dCwgdWludCBib3VuZGFyeSkKKyB7CisgCXVpbnQgaW5kZXggPSBn
ZXRfZ2xvYmFsX2lkKDApOworIAlpZihpbmRleCA+PSBib3VuZGFyeSkKKyAJCXJldHVybjsKKyAJ
CisgCWZsb2F0NCBBID0gY29udmVydF9mbG9hdDQoaW5BW2luZGV4XSk7CisgCWZsb2F0NCBCID0g
Y29udmVydF9mbG9hdDQoaW5CW2luZGV4XSk7CisgCWZsb2F0NCBPOworIAlmbG9hdCBhbHBoYTEg
PSBBLncgLyAyNTUuMGY7CisgCWZsb2F0IGFscGhhMiA9IEIudyAvIDI1NS4wZjsKKyAJCisgCU8u
eCA9IChtYXgoKDEuMGYgLSBhbHBoYTEpICogQi54ICsgQS54LCAoMS4wZiAtIGFscGhhMikgKiBB
LnggKyBCLngpKTsKKyAJTy55ID0gKG1heCgoMS4wZiAtIGFscGhhMSkgKiBCLnkgKyBBLnksICgx
LjBmIC0gYWxwaGEyKSAqIEEueSArIEIueSkpOworIAlPLnogPSAobWF4KCgxLjBmIC0gYWxwaGEx
KSAqIEIueiArIEEueiwgKDEuMGYgLSBhbHBoYTIpICogQS56ICsgQi56KSk7CisgCU8udyA9ICgx
LjBmIC0gKCgxLjBmIC0gYWxwaGExKSAqICgxLjBmIC0gYWxwaGEyKSkpICogMjU1LjBmOworIAkK
KyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KE8pOworIH0KZGlmZiAtcmNOIG9yaWdpbmFs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRUNvbG9yTWF0cml4T0NMLmNsIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1
OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZF
Q29sb3JNYXRyaXhPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUNvbG9yTWF0cml4T0NM
LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3BlbmNs
L1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wva2VybmVscy9GRUNvbG9yTWF0cml4T0NMLmNsCTIwMTEtMTItMDIgMDg6MzE6NDMuMjg3Mzc2
MTAxICswMTAwCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDkyIC0tLS0KKyAvKgor
ICAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0cm9uaWNzIC0gQXV0aG9yczogRGF2
aWQgQ29yaWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1cmluZGVyIFBhbCBTaW5naCA8c3Vy
aW5kZXItcGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxpbmkgPGdpdWxpby51cmxpbmlAc3Qu
Y29tPgorICAqCisgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAqCisg
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAqCisgICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAgKi8KKyAKKyBfX2tlcm5lbCB2b2lkIE1hdHJpeENvbG9yKF9fZ2xvYmFs
IHVjaGFyNCogaW4sIF9fZ2xvYmFsIHVjaGFyNCogb3V0LCBfX2dsb2JhbCBmbG9hdCogdmFsdWVz
LCB1aW50IGJvdW5kYXJ5KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7Cisg
CWlmKGluZGV4ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAkJCisgCWZsb2F0NCBvdXRmbHQ7
CisgCWZsb2F0NCBpbmZsdCA9IGNvbnZlcnRfZmxvYXQ0KGluW2luZGV4XSk7CisgCQorIAlvdXRm
bHQueCA9IHZhbHVlc1swXSAgKiBpbmZsdC54ICsgdmFsdWVzWzFdICAqIGluZmx0LnkgKyB2YWx1
ZXNbMl0gICogaW5mbHQueiArIHZhbHVlc1szXSAgKiBpbmZsdC53ICsgdmFsdWVzWzRdICAqIDI1
NS4wZjsKKyAJb3V0Zmx0LnkgPSB2YWx1ZXNbNV0gICogaW5mbHQueCArIHZhbHVlc1s2XSAgKiBp
bmZsdC55ICsgdmFsdWVzWzddICAqIGluZmx0LnogKyB2YWx1ZXNbOF0gICogaW5mbHQudyArIHZh
bHVlc1s5XSAgKiAyNTUuMGY7CisgCW91dGZsdC56ID0gdmFsdWVzWzEwXSAqIGluZmx0LnggKyB2
YWx1ZXNbMTFdICogaW5mbHQueSArIHZhbHVlc1sxMl0gKiBpbmZsdC56ICsgdmFsdWVzWzEzXSAq
IGluZmx0LncgKyB2YWx1ZXNbMTRdICogMjU1LjBmOworIAlvdXRmbHQudyA9IHZhbHVlc1sxNV0g
KiBpbmZsdC54ICsgdmFsdWVzWzE2XSAqIGluZmx0LnkgKyB2YWx1ZXNbMTddICogaW5mbHQueiAr
IHZhbHVlc1sxOF0gKiBpbmZsdC53ICsgdmFsdWVzWzE5XSAqIDI1NS4wZjsKKyAJCisgCW91dFtp
bmRleF0gPSBjb252ZXJ0X3VjaGFyNChvdXRmbHQpOworIH0KKyAKKyBfX2tlcm5lbCB2b2lkIFNh
dHVyYXRlQ29sb3IoX19nbG9iYWwgdWNoYXI0KiBpbiwgX19nbG9iYWwgdWNoYXI0KiBvdXQsIGZs
b2F0IHNhdCwgdWludCBib3VuZGFyeSkKKyB7CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lk
KDApOworIAlpZihpbmRleCA+PSBib3VuZGFyeSkKKyAJCXJldHVybjsKKyAJCQorIAlmbG9hdDQg
b3V0Zmx0OworIAlmbG9hdDQgaW5mbHQgPSBjb252ZXJ0X2Zsb2F0NChpbltpbmRleF0pOworIAkK
KyAJb3V0Zmx0LnggPSAoMC4yMTNmICsgMC43ODdmICogc2F0KSAqIGluZmx0LnggKyAoMC43MTVm
IC0gMC43MTVmICogc2F0KSAqIGluZmx0LnkgKyAoMC4wNzJmIC0gMC4wNzJmICogc2F0KSAqIGlu
Zmx0Lno7CisgCW91dGZsdC55ID0gKDAuMjEzZiAtIDAuMjEzZiAqIHNhdCkgKiBpbmZsdC54ICsg
KDAuNzE1ZiArIDAuMjg1ZiAqIHNhdCkgKiBpbmZsdC55ICsgKDAuMDcyZiAtIDAuMDcyZiAqIHNh
dCkgKiBpbmZsdC56OworIAlvdXRmbHQueiA9ICgwLjIxM2YgLSAwLjIxM2YgKiBzYXQpICogaW5m
bHQueCArICgwLjcxNWYgLSAwLjcxNWYgKiBzYXQpICogaW5mbHQueSArICgwLjA3MmYgKyAwLjky
OGYgKiBzYXQpICogaW5mbHQuejsKKyAJb3V0Zmx0LncgPSBpbmZsdC53OworIAkKKyAJb3V0W2lu
ZGV4XSA9IGNvbnZlcnRfdWNoYXI0KG91dGZsdCk7CisgfQorIAorIF9fa2VybmVsIHZvaWQgSHVl
Um90YXRlQ29sb3IoX19nbG9iYWwgdWNoYXI0KiBpbiwgX19nbG9iYWwgdWNoYXI0KiBvdXQsIGZs
b2F0IGNvc0h1ZSwgZmxvYXQgc2luSHVlLCB1aW50IGJvdW5kYXJ5KQorIHsKKyAJdWludCBpbmRl
eCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJu
OworIAkJCisgCWZsb2F0NCBvdXRmbHQ7CisgCWZsb2F0NCBpbmZsdCA9IGNvbnZlcnRfZmxvYXQ0
KGluW2luZGV4XSk7CisgCQorIAlvdXRmbHQueCA9IGluZmx0LnggKiAoMC4yMTNmICsgY29zSHVl
ICogMC43ODdmIC0gc2luSHVlICogMC4yMTNmKSArCisgICAgICAgICAgICAgICAgaW5mbHQueSAq
ICgwLjcxNWYgLSBjb3NIdWUgKiAwLjcxNWYgLSBzaW5IdWUgKiAwLjcxNWYpICsKKyAgICAgICAg
ICAgICAgICBpbmZsdC56ICogKDAuMDcyZiAtIGNvc0h1ZSAqIDAuMDcyZiArIHNpbkh1ZSAqIDAu
OTI4Zik7CisgICAgIG91dGZsdC55ID0gaW5mbHQueCAqICgwLjIxM2YgLSBjb3NIdWUgKiAwLjIx
M2YgKyBzaW5IdWUgKiAwLjE0M2YpICsKKyAgICAgICAgICAgICAgICBpbmZsdC55ICogKDAuNzE1
ZiArIGNvc0h1ZSAqIDAuMjg1ZiArIHNpbkh1ZSAqIDAuMTQwZikgKworICAgICAgICAgICAgICAg
IGluZmx0LnogKiAoMC4wNzJmIC0gY29zSHVlICogMC4wNzJmIC0gc2luSHVlICogMC4yODNmKTsK
KyAgICAgb3V0Zmx0LnogPSBpbmZsdC54ICogKDAuMjEzZiAtIGNvc0h1ZSAqIDAuMjEzZiAtIHNp
bkh1ZSAqIDAuNzg3ZikgKworICAgICAgICAgICAgICAgIGluZmx0LnkgKiAoMC43MTVmIC0gY29z
SHVlICogMC43MTVmICsgc2luSHVlICogMC43MTVmKSArCisgICAgICAgICAgICAgICAgaW5mbHQu
eiAqICgwLjA3MmYgKyBjb3NIdWUgKiAwLjkyOGYgKyBzaW5IdWUgKiAwLjA3MmYpOworICAgICBv
dXRmbHQudyA9IGluZmx0Lnc7CisgICAgIAorICAgICBvdXRbaW5kZXhdID0gY29udmVydF91Y2hh
cjQob3V0Zmx0KTsKKyB9CisgCisgX19rZXJuZWwgdm9pZCBMdW1pbmFuY2VUb0FscGhhQ29sb3Io
X19nbG9iYWwgdWNoYXI0KiBpbiwgX19nbG9iYWwgdWNoYXI0KiBvdXQsIHVpbnQgYm91bmRhcnkp
CisgeworIAl1aW50IGluZGV4ID0gZ2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj0gYm91
bmRhcnkpCisgCQlyZXR1cm47CisgCQkKKyAJZmxvYXQ0IG91dGZsdDsKKyAJZmxvYXQ0IGluZmx0
ID0gY29udmVydF9mbG9hdDQoaW5baW5kZXhdKTsKKyAJCisgCW91dGZsdC54ID0gMC4wZjsKKyAJ
b3V0Zmx0LnkgPSAwLjBmOworIAlvdXRmbHQueiA9IDAuMGY7CisgCW91dGZsdC53ID0gMC4yMTI1
ZiAqIGluZmx0LnggKyAwLjcxNTRmICogaW5mbHQueSArIDAuMDcyMWYgKiBpbmZsdC56OworIAkK
KyAJb3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KG91dGZsdCk7CisgfQpkaWZmIC1yY04gb3Jp
Z2luYWwvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL29jbC9rZXJuZWxzL0ZFQ29tcG9uZW50VHJhbnNmZXJPQ0wuY2wgd2Via2l0X29wZW5jbC9X
ZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2Ns
L2tlcm5lbHMvRkVDb21wb25lbnRUcmFuc2Zlck9DTC5jbAoqKiogb3JpZ2luYWwvV2ViS2l0LXI5
NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxz
L0ZFQ29tcG9uZW50VHJhbnNmZXJPQ0wuY2wJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg
KzAxMDAKLS0tIHdlYmtpdF9vcGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9rZXJuZWxzL0ZFQ29tcG9uZW50VHJhbnNmZXJPQ0wu
Y2wJMjAxMS0xMi0wMiAwODozMTo0My4yODczNzYxMDEgKzAxMDAKKioqKioqKioqKioqKioqCioq
KiAwICoqKioKLS0tIDEsNDEgLS0tLQorIC8qCisgICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1p
Y3JvZWxlY3Ryb25pY3MgLSBBdXRob3JzOiBEYXZpZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwu
Y29tPiwgU3VyaW5kZXIgUGFsIFNpbmdoIDxzdXJpbmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1
bGlvIFVybGluaSA8Z2l1bGlvLnVybGluaUBzdC5jb20+CisgICoKKyAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgICoKKyAgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgICoKKyAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICAqLworIAorIF9fa2Vy
bmVsIHZvaWQgQ29tcG9uZW50VHJhbnNmZXIoX19nbG9iYWwgdWNoYXI0KiBpbiwKKyAJCQkJCQkJ
ICAgCV9fZ2xvYmFsIHVjaGFyNCogb3V0LAorIAkJCQkJCQkgICAJX19nbG9iYWwgdWNoYXIqIHJf
bHV0LAorIAkJCQkJCQkgICAJX19nbG9iYWwgdWNoYXIqIGdfbHV0LAorIAkJCQkJCQkgIAlfX2ds
b2JhbCB1Y2hhciogYl9sdXQsCisgCQkJCQkJCSAgIAlfX2dsb2JhbCB1Y2hhciogYV9sdXQsCisg
CQkJCQkJCSAgIAl1aW50IGJvdW5kYXJ5KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxf
aWQoMCk7CisgCWlmKGluZGV4ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAkJCisgCXVjaGFy
NCBvdXR0bXA7CisgCXVjaGFyNCBpbnRtcCA9IGluW2luZGV4XTsKKyAJCisgCW91dHRtcC54ID0g
cl9sdXRbaW50bXAueF07CisgCW91dHRtcC55ID0gZ19sdXRbaW50bXAueV07CisgCW91dHRtcC56
ID0gYl9sdXRbaW50bXAuel07CisgCW91dHRtcC53ID0gYV9sdXRbaW50bXAud107CisgCQorIAlv
dXRbaW5kZXhdID0gb3V0dG1wOwkKKyB9CmRpZmYgLXJjTiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL2tlcm5lbHMvRkVE
aXNwbGFjZW1lbnRNYXBPQ0wuY2wgd2Via2l0X29wZW5jbC9XZWJLaXQtcjk1MzU4L1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL2tlcm5lbHMvRkVEaXNwbGFjZW1l
bnRNYXBPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRURpc3BsYWNlbWVudE1hcE9DTC5j
bAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotLS0gd2Via2l0X29wZW5jbC9X
ZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2Ns
L2tlcm5lbHMvRkVEaXNwbGFjZW1lbnRNYXBPQ0wuY2wJMjAxMS0xMi0wMiAwODozMTo0My4yODcz
NzYxMDEgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAwICoqKioKLS0tIDEsNTIgLS0tLQorIC8q
CisgICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1pY3JvZWxlY3Ryb25pY3MgLSBBdXRob3JzOiBE
YXZpZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwuY29tPiwgU3VyaW5kZXIgUGFsIFNpbmdoIDxz
dXJpbmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1bGlvIFVybGluaSA8Z2l1bGlvLnVybGluaUBz
dC5jb20+CisgICoKKyAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICoK
KyAgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICoKKyAgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICAqLworIAorIF9fa2VybmVsIHZvaWQgRGlzcGxhY2VtZW50TWFwKF9f
Z2xvYmFsIHVjaGFyNCogaW5BLAorIAkJCQkJCQkgIF9fZ2xvYmFsIHVjaGFyKiBpbkIsCisgCQkJ
CQkJCSAgX19nbG9iYWwgdWNoYXI0KiBvdXQsCisgCQkJCQkJCSAgZmxvYXQgc2NhbGVYLCBmbG9h
dCBzY2FsZVksCisgCQkJCQkJCSAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WCwgZmxvYXQgc2NhbGVB
ZGp1c3RtZW50WSwKKyAJCQkJCQkJICB1aW50IGNoYW5TZWxlY3RYLCB1aW50IGNoYW5TZWxlY3RZ
LAorIAkJCQkJCQkgIHVpbnQgd2lkdGgsIHVpbnQgaGVpZ2h0LCB1aW50IGJvdW5kYXJ5KQorIHsK
KyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4ID49IGJvdW5kYXJ5
KQorIAkJcmV0dXJuOworIAkJCisgCXVjaGFyNCBvdXR0bXA7CisgCQkKKyAJdWludCBzdHJpZGVf
dWMgID0gd2lkdGggKiA0OworIAl1aW50IHN0cmlkZV91YzQgPSB3aWR0aDsKKyAJdWludCB5ID0g
aW5kZXggLyB3aWR0aDsKKyAJdWludCB4ID0gaW5kZXggLSAod2lkdGggKiB5KTsKKyAJdWludCBs
aW5lX3VjICA9IHkgKiBzdHJpZGVfdWM7CisgCXVpbnQgbGluZV91YzQgPSB5ICogc3RyaWRlX3Vj
NDsKKyAJdWludCBkc3RJbmRleF91YyAgPSBsaW5lX3VjICsgeCAqIDQ7CisgCXVpbnQgZHN0SW5k
ZXhfdWM0ID0gbGluZV91YzQgKyB4OworIAkKKyAJaW50IHNyY1ggPSB4ICsgY29udmVydF9pbnQo
c2NhbGVYICogaW5CW2RzdEluZGV4X3VjICsgY2hhblNlbGVjdFggLSAxXSArIHNjYWxlQWRqdXN0
bWVudFgpOworIAlpbnQgc3JjWSA9IHkgKyBjb252ZXJ0X2ludChzY2FsZVkgKiBpbkJbZHN0SW5k
ZXhfdWMgKyBjaGFuU2VsZWN0WSAtIDFdICsgc2NhbGVBZGp1c3RtZW50WSk7CisgCQorIAlpZihz
cmNYIDwgMCB8fCBzcmNYID49IHdpZHRoIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gaGVpZ2h0KQor
IAkJb3V0dG1wID0gKHVjaGFyNCkgKDApOworIAllbHNlCisgCQlvdXR0bXAgPSBpbkFbc3JjWSAq
IHN0cmlkZV91YzQgKyBzcmNYXTsKKyAJCisgCW91dFtkc3RJbmRleF91YzRdID0gb3V0dG1wOwor
IH0KZGlmZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRUxpZ2h0aW5nT0NMLmNsIHdlYmtpdF9v
cGVuY2wvV2ViS2l0LXI5NTM1OC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL29jbC9rZXJuZWxzL0ZFTGlnaHRpbmdPQ0wuY2wKKioqIG9yaWdpbmFsL1dlYktpdC1yOTUz
NTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9G
RUxpZ2h0aW5nT0NMLmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3
ZWJraXRfb3BlbmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9vY2wva2VybmVscy9GRUxpZ2h0aW5nT0NMLmNsCTIwMTEtMTItMDIgMDg6MzE6
NDMuMjg3Mzc2MTAxICswMTAwCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDQ2OCAt
LS0tCisgLyoKKyAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1
dGhvcnM6IERhdmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwg
U2luZ2ggPHN1cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8u
dXJsaW5pQHN0LmNvbT4KKyAgKgorICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAgKgorICAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgICovCisgCisgX19jb25zdGFudCBpbnQgY1BpeGVsU2l6
ZSA9IDQ7CisgX19jb25zdGFudCBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CisgX19jb25z
dGFudCBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMS4wZiAvIDQuMGY7CisgCisgdHlwZWRlZiBzdHJ1
Y3QKKyB7CisgCWZsb2F0IHg7CisgCWZsb2F0IHk7CisgCWZsb2F0IHo7CisgfU15RmxvYXRQb2lu
dDNEOworIAorIHR5cGVkZWYgc3RydWN0CisgeworIAlpbnQgeDsKKyAJaW50IHk7CisgfU15SW50
UG9pbnQyRDsKKyAKKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAJaW50IHg7CisgCWludCB5OworIAlp
bnQgejsKKyB9TXlJbnRQb2ludDNEOworIAorIHR5cGVkZWYgc3RydWN0CisgeworIAlNeUZsb2F0
UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAJTXlGbG9hdFBvaW50M0QgY29sb3JWZWN0b3I7CisgCWZs
b2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOworIAlNeUZsb2F0UG9pbnQzRCBsaWdodFNvdXJjZVBvc2l0
aW9uOworIAlNeUZsb2F0UG9pbnQzRCBkaXJlY3Rpb25WZWN0b3I7CisgCU15RmxvYXRQb2ludDNE
IHByaXZhdGVDb2xvclZlY3RvcjsKKyAJZmxvYXQgY29uZUN1dE9mZkxpbWl0OworIAlmbG9hdCBj
b25lRnVsbExpZ2h0OworIAlpbnQgc3BlY3VsYXJFeHBvbmVudDsKKyB9UGFpbnRpbmdEYXRhT0NM
OworIAorIGZsb2F0IHZlY3RvcjNETGVuZ3RoKE15RmxvYXRQb2ludDNEIHZlY3RvcikKKyB7Cisg
CWZsb2F0IGxlbmd0aCA9IHNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVj
dG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56KTsKKyAJcmV0dXJuIGxlbmd0aDsKKyB9CisgCisg
ZmxvYXQgdmVjdG9yM0REb3QoTXlGbG9hdFBvaW50M0QgdmVjdG9yQSwgTXlGbG9hdFBvaW50M0Qg
dmVjdG9yQikKKyB7CisgCWZsb2F0IHZhbCA9IHZlY3RvckEueCAqIHZlY3RvckIueCArIHZlY3Rv
ckEueSAqIHZlY3RvckIueSArIHZlY3RvckEueiAqIHZlY3RvckIuejsKKyAJcmV0dXJuIHZhbDsK
KyB9CisgCisgTXlJbnRQb2ludDJEIGNhbGN1bGF0ZU5vcm1hbDJEVmVjdG9yKHVjaGFyKiBpbiwg
aW50IG9mZnNldCkKKyB7CisgCU15SW50UG9pbnQyRCBub3JtYWwyRFZlY3RvcjsKKyB9CisgCisg
X19rZXJuZWwgdm9pZCBEaWZmdXNlTGlnaHRpbmdQb2ludExpZ2h0KF9fZ2xvYmFsIHVjaGFyKiB3
cmssCisgCQkJCQkJCQkJCVBhaW50aW5nRGF0YU9DTCBwYWludGluZ0RhdGEsCisgCQkJCQkJCQkJ
CWludCB3aWR0aCwKKyAJCQkJCQkJCQkJZmxvYXQgc3VyZmFjZVNjYWxlLAorIAkJCQkJCQkJCQl1
aW50IGJvdW5kYXJ5LAorIAkJCQkJCQkJCQlmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCisgeworIAl1
aW50IGluZGV4ID0gZ2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYoaW5kZXggPj1ib3VuZGFyeSkKKyAJ
CXJldHVybjsKKyAKKyAJaW50IG9mZnNldCA9ICBjUGl4ZWxTaXplICogKGluZGV4ICsgd2lkdGgg
KyAxICsgKDIgKiAoaW5kZXggLyAod2lkdGggLSAyKSkpKTsKKyAJCisgCWludCB5ID0gKG9mZnNl
dCAvIGNQaXhlbFNpemUpIC8gd2lkdGg7CisgCWludCB4ID0gKG9mZnNldCAvIGNQaXhlbFNpemUp
IC0gKHdpZHRoICogeSk7CisgCWludCB6ID0gd3JrW29mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXRdICogc3VyZmFjZVNjYWxlOworIAkKKyAJcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnggPSAo
cGFpbnRpbmdEYXRhLmxpZ2h0U291cmNlUG9zaXRpb24ueCAtIHgpOworICAgICBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3IueSA9IChwYWludGluZ0RhdGEubGlnaHRTb3VyY2VQb3NpdGlvbi55IC0g
eSk7CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56ID0gKHBhaW50aW5nRGF0YS5saWdo
dFNvdXJjZVBvc2l0aW9uLnogLSB6KTsKKyAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVu
Z3RoID0gdmVjdG9yM0RMZW5ndGgocGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKTsKKyAJCisgCU15
SW50UG9pbnQyRCBub3JtYWwyRFZlY3RvcjsKKyAJaW50IG9mZnNldF90bXAgPSBvZmZzZXQ7Cisg
CQorIAlpbnQgbGVmdCAgICAgICAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldF07CisgCWludCByaWdodCAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCAtPSB3aWR0
aCAqIGNQaXhlbFNpemU7CisgCWludCB0b3BMZWZ0ICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHRvcCAgICAgICAgICA9IHdy
a1tvZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCB0b3BSaWdodCAgICAg
PSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJ
b2Zmc2V0X3RtcCArPSAod2lkdGggKiBjUGl4ZWxTaXplKSA8PCAxOworIAlpbnQgYm90dG9tTGVm
dCAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07
CisgCWludCBib3R0b20gICAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXRdOworIAlpbnQgYm90dG9tUmlnaHQgID0gd3JrW29mZnNldF90bXAgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldF07CisgCW5vcm1hbDJEVmVjdG9yLnggPSAoLXRvcExlZnQgKyB0
b3BSaWdodCAtIChsZWZ0IDw8IDEpICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRv
bVJpZ2h0KTsKKyAgICAgbm9ybWFsMkRWZWN0b3IueSA9ICgtdG9wTGVmdCAtICh0b3AgPDwgMSkg
LSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOwor
ICAgICAgICAgICAgIAorICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgICAKKyAJTXlGbG9h
dFBvaW50M0Qgbm9ybWFsVmVjdG9yOworIAlub3JtYWxWZWN0b3IueCA9IChjRmFjdG9yMWRpdjQg
KiBjb252ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLngpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9y
bWFsVmVjdG9yLnkgPSAoY0ZhY3RvcjFkaXY0ICogY29udmVydF9mbG9hdChub3JtYWwyRFZlY3Rv
ci55KSAqIHN1cmZhY2VTY2FsZSk7CisgCW5vcm1hbFZlY3Rvci56ID0gMS4wZjsKKyAJCisgCWZs
b2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKG5vcm1hbFZlY3Rvcik7Cisg
CQorIAkvL1RoaXMgbGluZSBTSE9VTEQgd29yaywgYnV0IGlzIGJvZ3VzIGZvciBzb21lIHJlYXNv
bi4uLiBUaGUgc2FtZSB0aGluZyBpcyBhY2hpZXZlZCB1bmRlcm5lYXRoIHVzaW5nIHRoZSBleHBh
bmRlZCB2ZWN0b3IzRERvdCByb3V0aW5lLi4uCisgCS8vbGlnaHRTdHJlbmd0aCA9IGRpZmZ1c2VD
b25zdGFudCAqIHZlY3RvcjNERG90KG5vcm1hbFZlY3RvciwgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGgpOworIAkKKyAJbGlnaHRTdHJlbmd0aCA9IGRpZmZ1c2VDb25zdGFudCAqICggbm9ybWFsVmVj
dG9yLnggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueCArIG5vcm1hbFZlY3Rvci55ICogcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnkgCisgCSsgbm9ybWFsVmVjdG9yLnogKiBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3IueiApIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCogcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yTGVuZ3RoKTsKKyAJCisgCWxpZ2h0U3RyZW5ndGggPSBjbGFtcChsaWdodFN0cmVu
Z3RoLCAwLjBmLCAxLjBmKTsKKyAJCisgICAgIHdya1tvZmZzZXRdICAgICA9IGNvbnZlcnRfdWNo
YXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KTsKKyAJd3JrW29m
ZnNldCArIDFdID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNv
bG9yVmVjdG9yLnkpOworIAl3cmtbb2Zmc2V0ICsgMl0gPSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3Ry
ZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iueik7CisgfQorIAorIF9fa2VybmVsIHZv
aWQgRGlmZnVzZUxpZ2h0aW5nU3BvdExpZ2h0KF9fZ2xvYmFsIHVjaGFyKiB3cmssCisgCQkJCQkJ
CQkJICAgUGFpbnRpbmdEYXRhT0NMIHBhaW50aW5nRGF0YSwKKyAJCQkJCQkJCQkgICBpbnQgd2lk
dGgsCisgCQkJCQkJCQkJICAgZmxvYXQgc3VyZmFjZVNjYWxlLAorIAkJCQkJCQkJCSAgIHVpbnQg
Ym91bmRhcnksCisgCQkJCQkJCQkJICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KQorIHsKKyAJdWlu
dCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4ID49Ym91bmRhcnkpCisgCQly
ZXR1cm47CisgCisgCWludCBvZmZzZXQgPSBjUGl4ZWxTaXplICogKGluZGV4ICsgd2lkdGggKyAx
ICsgKDIgKiAoaW5kZXggLyAod2lkdGggLSAyKSkpKTsKKyAJCisgCWludCB5ID0gKG9mZnNldCAv
IGNQaXhlbFNpemUpIC8gd2lkdGg7CisgCWludCB4ID0gKG9mZnNldCAvIGNQaXhlbFNpemUpIC0g
KHdpZHRoICogeSk7CisgCWludCB6ID0gd3JrW29mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXRd
ICogc3VyZmFjZVNjYWxlOworIAkKKyAJcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnggPSAocGFp
bnRpbmdEYXRhLmxpZ2h0U291cmNlUG9zaXRpb24ueCAtIHgpOworICAgICBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3IueSA9IChwYWludGluZ0RhdGEubGlnaHRTb3VyY2VQb3NpdGlvbi55IC0geSk7
CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56ID0gKHBhaW50aW5nRGF0YS5saWdodFNv
dXJjZVBvc2l0aW9uLnogLSB6KTsKKyAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3Ro
ID0gdmVjdG9yM0RMZW5ndGgocGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKTsKKyAgICAgCisgIAlm
bG9hdCBjb3NpbmVPZkFuZ2xlID0gdmVjdG9yM0REb3QocGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
LCBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yKSAvIHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
ckxlbmd0aDsKKyAgICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0KQorICAgICB7CisgICAgICAgICAvLyBObyBsaWdodCBpcyBwcm9kdWNlZCwgc2Nhbmxp
bmVzIGFyZSBub3QgdXBkYXRlZAorICAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngg
PSAwLjBmOworICAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkgPSAwLjBmOworICAg
ICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnogPSAwLjBmOworICAgICB9CisgCisgICAg
IC8vIFNldCB0aGUgY29sb3Igb2YgdGhlIHBpeGVsCisgICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7
CisgICAgIGxpZ2h0U3RyZW5ndGggPSBwb3coLWNvc2luZU9mQW5nbGUsIHBhaW50aW5nRGF0YS5z
cGVjdWxhckV4cG9uZW50KTsKKyAKKyAgICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0Rh
dGEuY29uZUZ1bGxMaWdodCkKKyAgICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0
YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1
dE9mZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpOworIAorICAgICBpZiAobGln
aHRTdHJlbmd0aCA+IDEuMGYpCisgICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKKyAKKyAg
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnggPSBwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9y
VmVjdG9yLnggKiBsaWdodFN0cmVuZ3RoOworICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iu
eSA9IHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueSAqIGxpZ2h0U3RyZW5ndGg7Cisg
ICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56ID0gcGFpbnRpbmdEYXRhLnByaXZhdGVDb2xv
clZlY3Rvci56ICogbGlnaHRTdHJlbmd0aDsKKyAJCisgCU15SW50UG9pbnQyRCBub3JtYWwyRFZl
Y3RvcjsKKyAJaW50IG9mZnNldF90bXAgPSBvZmZzZXQ7CisgCQorIAlpbnQgbGVmdCAgICAgICAg
ID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07Cisg
CWludCByaWdodCAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCAtPSB3aWR0aCAqIGNQaXhlbFNpemU7CisgCWlu
dCB0b3BMZWZ0ICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0XTsKKyAJaW50IHRvcCAgICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY0FscGhh
Q2hhbm5lbE9mZnNldF07CisgCWludCB0b3BSaWdodCAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCArPSAod2lkdGgg
KiBjUGl4ZWxTaXplKSA8PCAxOworIAlpbnQgYm90dG9tTGVmdCAgID0gd3JrW29mZnNldF90bXAg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCBib3R0b20gICAgICAg
PSB3cmtbb2Zmc2V0X3RtcCArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgYm90dG9tUmln
aHQgID0gd3JrW29mZnNldF90bXAgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07
CisgCW5vcm1hbDJEVmVjdG9yLnggPSAoLXRvcExlZnQgKyB0b3BSaWdodCAtIChsZWZ0IDw8IDEp
ICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0KTsKKyAgICAgbm9ybWFs
MkRWZWN0b3IueSA9ICgtdG9wTGVmdCAtICh0b3AgPDwgMSkgLSB0b3BSaWdodCArIGJvdHRvbUxl
ZnQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOworICAgICAKKyAJTXlGbG9hdFBvaW50
M0Qgbm9ybWFsVmVjdG9yOworIAlub3JtYWxWZWN0b3IueCA9IChjRmFjdG9yMWRpdjQgKiBjb252
ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLngpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9ybWFsVmVj
dG9yLnkgPSAoY0ZhY3RvcjFkaXY0ICogY29udmVydF9mbG9hdChub3JtYWwyRFZlY3Rvci55KSAq
IHN1cmZhY2VTY2FsZSk7CisgCW5vcm1hbFZlY3Rvci56ID0gMS4wZjsKKyAJCisgCWZsb2F0IG5v
cm1hbFZlY3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKG5vcm1hbFZlY3Rvcik7CisgCQorIAkv
L1RoaXMgbGluZSBTSE9VTEQgd29yaywgYnV0IGlzIGJvZ3VzIGZvciBzb21lIHJlYXNvbi4uLiBU
aGUgc2FtZSB0aGluZyBpcyBhY2hpZXZlZCB1bmRlcm5lYXRoIHVzaW5nIHRoZSBleHBhbmRlZCB2
ZWN0b3IzRERvdCByb3V0aW5lLi4uCisgCS8vbGlnaHRTdHJlbmd0aCA9IGRpZmZ1c2VDb25zdGFu
dCAqIHZlY3RvcjNERG90KG5vcm1hbFZlY3RvciwgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAv
IChub3JtYWxWZWN0b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwor
IAkKKyAJbGlnaHRTdHJlbmd0aCA9IGRpZmZ1c2VDb25zdGFudCAqICggbm9ybWFsVmVjdG9yLngg
KiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueCArIG5vcm1hbFZlY3Rvci55ICogcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnkgCisgCSsgbm9ybWFsVmVjdG9yLnogKiBwYWludGluZ0RhdGEubGln
aHRWZWN0b3IueiApIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCogcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yTGVuZ3RoKTsKKyAJCisgCWxpZ2h0U3RyZW5ndGggPSBjbGFtcChsaWdodFN0cmVuZ3RoLCAw
LjBmLCAxLjBmKTsKKyAJCisgICAgIHdya1tvZmZzZXRdICAgICA9IGNvbnZlcnRfdWNoYXIobGln
aHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KTsKKyAJd3JrW29mZnNldCAr
IDFdID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkpOworIAl3cmtbb2Zmc2V0ICsgMl0gPSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGgg
KiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iueik7CisgfQorIAorIF9fa2VybmVsIHZvaWQgRGlm
ZnVzZUxpZ2h0aW5nRGlzdGFudExpZ2h0KF9fZ2xvYmFsIHVjaGFyKiB3cmssCisgCQkJCQkJCQkJ
CSAgUGFpbnRpbmdEYXRhT0NMIHBhaW50aW5nRGF0YSwKKyAJCQkJCQkJCQkJICBpbnQgd2lkdGgs
CisgCQkJCQkJCQkJCSAgZmxvYXQgc3VyZmFjZVNjYWxlLAorIAkJCQkJCQkJCQkgIHVpbnQgYm91
bmRhcnksCisgCQkJCQkJCQkJCSAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KQorIHsKKyAJdWludCBp
bmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4ID49Ym91bmRhcnkpCisgCQlyZXR1
cm47CisgCisgCWludCBvZmZzZXQgPSBjUGl4ZWxTaXplICogKGluZGV4ICsgd2lkdGggKyAxICsg
KDIgKiAoaW5kZXggLyAod2lkdGggLSAyKSkpKTsKKyAJCisgCU15SW50UG9pbnQyRCBub3JtYWwy
RFZlY3RvcjsKKyAJaW50IG9mZnNldF90bXAgPSBvZmZzZXQ7CisgCQorIAlpbnQgbGVmdCAgICAg
ICAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07
CisgCWludCByaWdodCAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCAtPSB3aWR0aCAqIGNQaXhlbFNpemU7Cisg
CWludCB0b3BMZWZ0ICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0XTsKKyAJaW50IHRvcCAgICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldF07CisgCWludCB0b3BSaWdodCAgICAgPSB3cmtbb2Zmc2V0X3RtcCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCArPSAod2lk
dGggKiBjUGl4ZWxTaXplKSA8PCAxOworIAlpbnQgYm90dG9tTGVmdCAgID0gd3JrW29mZnNldF90
bXAgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCBib3R0b20gICAg
ICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgYm90dG9t
UmlnaHQgID0gd3JrW29mZnNldF90bXAgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dF07CisgCW5vcm1hbDJEVmVjdG9yLnggPSAoLXRvcExlZnQgKyB0b3BSaWdodCAtIChsZWZ0IDw8
IDEpICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0KTsKKyAgICAgbm9y
bWFsMkRWZWN0b3IueSA9ICgtdG9wTGVmdCAtICh0b3AgPDwgMSkgLSB0b3BSaWdodCArIGJvdHRv
bUxlZnQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOworICAgICAgICAgICAgIAorICAg
ICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgICAKKyAJTXlGbG9hdFBvaW50M0Qgbm9ybWFsVmVj
dG9yOworIAlub3JtYWxWZWN0b3IueCA9IChjRmFjdG9yMWRpdjQgKiBjb252ZXJ0X2Zsb2F0KG5v
cm1hbDJEVmVjdG9yLngpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9ybWFsVmVjdG9yLnkgPSAoY0Zh
Y3RvcjFkaXY0ICogY29udmVydF9mbG9hdChub3JtYWwyRFZlY3Rvci55KSAqIHN1cmZhY2VTY2Fs
ZSk7CisgCW5vcm1hbFZlY3Rvci56ID0gMS4wZjsKKyAJCisgCWZsb2F0IG5vcm1hbFZlY3Rvckxl
bmd0aCA9IHZlY3RvcjNETGVuZ3RoKG5vcm1hbFZlY3Rvcik7CisgCQorIAkvL1RoaXMgbGluZSBT
SE9VTEQgd29yaywgYnV0IGlzIGJvZ3VzIGZvciBzb21lIHJlYXNvbi4uLiBUaGUgc2FtZSB0aGlu
ZyBpcyBhY2hpZXZlZCB1bmRlcm5lYXRoIHVzaW5nIHRoZSBleHBhbmRlZCB2ZWN0b3IzRERvdCBy
b3V0aW5lLi4uCisgCS8vbGlnaHRTdHJlbmd0aCA9IGRpZmZ1c2VDb25zdGFudCAqIHZlY3RvcjNE
RG90KG5vcm1hbFZlY3RvciwgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0
b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOworIAkKKyAJbGlnaHRT
dHJlbmd0aCA9IGRpZmZ1c2VDb25zdGFudCAqICggbm9ybWFsVmVjdG9yLnggKiBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3IueCArIG5vcm1hbFZlY3Rvci55ICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnkgCisgCSsgbm9ybWFsVmVjdG9yLnogKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueiAp
IC8gKG5vcm1hbFZlY3Rvckxlbmd0aCogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsK
KyAJCisgCWxpZ2h0U3RyZW5ndGggPSBjbGFtcChsaWdodFN0cmVuZ3RoLCAwLjBmLCAxLjBmKTsK
KyAJCisgICAgIHdya1tvZmZzZXRdICAgICA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAq
IHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KTsKKyAJd3JrW29mZnNldCArIDFdID0gY29udmVy
dF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkpOworIAl3
cmtbb2Zmc2V0ICsgMl0gPSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0Rh
dGEuY29sb3JWZWN0b3Iueik7CisgfQorIAorIF9fa2VybmVsIHZvaWQgU3BlY3VsYXJMaWdodGlu
Z1BvaW50TGlnaHQoX19nbG9iYWwgdWNoYXIqIHdyaywKKyAJCQkJCQkJCQkJIFBhaW50aW5nRGF0
YU9DTCBwYWludGluZ0RhdGEsCisgCQkJCQkJCSAgCQkJIGludCB3aWR0aCwKKyAJCQkJCQkJCQkJ
IGZsb2F0IHN1cmZhY2VTY2FsZSwKKyAJCQkJCQkJICAgCQkJIHVpbnQgYm91bmRhcnksCisgCQkJ
CQkJCSAgIAkJCSBmbG9hdCBzcGVjdWxhckNvbnN0YW50LAorIAkJCQkJCQkgICAJCQkgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCkKKyB7CisgCXVpbnQgaW5kZXggPSBnZXRfZ2xvYmFsX2lkKDApOwor
IAlpZihpbmRleCA+PSBib3VuZGFyeSkKKyAJCXJldHVybjsKKyAKKyAJaW50IG9mZnNldCA9ICBj
UGl4ZWxTaXplICogKGluZGV4ICsgd2lkdGggKyAxICsgKDIgKiAoaW5kZXggLyAod2lkdGggLSAy
KSkpKTsKKyAJCisgCWludCB5ID0gKG9mZnNldCAvIGNQaXhlbFNpemUpIC8gd2lkdGg7CisgCWlu
dCB4ID0gKG9mZnNldCAvIGNQaXhlbFNpemUpIC0gKHdpZHRoICogeSk7CisgCWludCB6ID0gd3Jr
W29mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXRdICogc3VyZmFjZVNjYWxlOworIAkKKyAJcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnggPSAocGFpbnRpbmdEYXRhLmxpZ2h0U291cmNlUG9zaXRp
b24ueCAtIHgpOworICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueSA9IChwYWludGluZ0Rh
dGEubGlnaHRTb3VyY2VQb3NpdGlvbi55IC0geSk7CisgICAgIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci56ID0gKHBhaW50aW5nRGF0YS5saWdodFNvdXJjZVBvc2l0aW9uLnogLSB6KTsKKyAgICAg
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RMZW5ndGgocGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yKTsKKyAJCisgCU15SW50UG9pbnQyRCBub3JtYWwyRFZlY3RvcjsKKyAJ
aW50IG9mZnNldF90bXAgPSBvZmZzZXQ7CisgCQorIAlpbnQgbGVmdCAgICAgICAgID0gd3JrW29m
ZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCByaWdo
dCAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0XTsKKyAJb2Zmc2V0X3RtcCAtPSB3aWR0aCAqIGNQaXhlbFNpemU7CisgCWludCB0b3BMZWZ0
ICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
XTsKKyAJaW50IHRvcCAgICAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9m
ZnNldF07CisgCWludCB0b3BSaWdodCAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCArPSAod2lkdGggKiBjUGl4ZWxT
aXplKSA8PCAxOworIAlpbnQgYm90dG9tTGVmdCAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCBib3R0b20gICAgICAgPSB3cmtbb2Zm
c2V0X3RtcCArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgYm90dG9tUmlnaHQgID0gd3Jr
W29mZnNldF90bXAgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCW5vcm1h
bDJEVmVjdG9yLnggPSAoLXRvcExlZnQgKyB0b3BSaWdodCAtIChsZWZ0IDw8IDEpICsgKHJpZ2h0
IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0KTsKKyAgICAgbm9ybWFsMkRWZWN0b3Iu
eSA9ICgtdG9wTGVmdCAtICh0b3AgPDwgMSkgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAoYm90
dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOworICAgICAgICAgCisgICAgIGZsb2F0IGxpZ2h0U3Ry
ZW5ndGg7CisgICAgIAorIAlNeUZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgCW5vcm1hbFZl
Y3Rvci54ID0gKGNGYWN0b3IxZGl2NCAqIGNvbnZlcnRfZmxvYXQobm9ybWFsMkRWZWN0b3IueCkg
KiBzdXJmYWNlU2NhbGUpOworIAlub3JtYWxWZWN0b3IueSA9IChjRmFjdG9yMWRpdjQgKiBjb252
ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLnkpICogc3VyZmFjZVNjYWxlKTsKKyAJbm9ybWFsVmVj
dG9yLnogPSAxLjBmOworIAkKKyAJZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RM
ZW5ndGgobm9ybWFsVmVjdG9yKTsKKyAJCisgCU15RmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3I7
CisgCWhhbGZ3YXlWZWN0b3IueCA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci54OworIAloYWxm
d2F5VmVjdG9yLnkgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueTsKKyAJaGFsZndheVZlY3Rv
ci56ID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnogKyBwYWludGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGg7CisgCQorIAlmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gdmVjdG9yM0RMZW5n
dGgoaGFsZndheVZlY3Rvcik7CisgCisgCWxpZ2h0U3RyZW5ndGggPSBzcGVjdWxhckNvbnN0YW50
ICogcG93KHZlY3RvcjNERG90KG5vcm1hbFZlY3RvciwgaGFsZndheVZlY3RvcikgLyAobm9ybWFs
VmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIHNwZWN1bGFyRXhwb25lbnQpOwor
IAkJCisgCWxpZ2h0U3RyZW5ndGggPSBjbGFtcChsaWdodFN0cmVuZ3RoLCAwLjBmLCAxLjBmKTsK
KyAKKyAJd3JrW29mZnNldF0gICAgID0gY29udmVydF91Y2hhcihsaWdodFN0cmVuZ3RoICogcGFp
bnRpbmdEYXRhLmNvbG9yVmVjdG9yLngpOworIAl3cmtbb2Zmc2V0ICsgMV0gPSBjb252ZXJ0X3Vj
aGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSk7CisgCXdya1tv
ZmZzZXQgKyAyXSA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5j
b2xvclZlY3Rvci56KTsKKyB9CisgCisgX19rZXJuZWwgdm9pZCBTcGVjdWxhckxpZ2h0aW5nU3Bv
dExpZ2h0KF9fZ2xvYmFsIHVjaGFyKiB3cmssCisgCQkJCQkJCQkJCSBQYWludGluZ0RhdGFPQ0wg
cGFpbnRpbmdEYXRhLAorIAkJCQkJCQkgIAkJCSBpbnQgd2lkdGgsCisgCQkJCQkJCQkJCSBmbG9h
dCBzdXJmYWNlU2NhbGUsCisgCQkJCQkJCSAgIAkJCSB1aW50IGJvdW5kYXJ5LAorIAkJCQkJCQkg
ICAJCQkgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwKKyAJCQkJCQkJICAgCQkJIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQpCisgeworIAl1aW50IGluZGV4ID0gZ2V0X2dsb2JhbF9pZCgwKTsKKyAJaWYo
aW5kZXggPj0gYm91bmRhcnkpCisgCQlyZXR1cm47CisgCisgCWludCBvZmZzZXQgPSAgY1BpeGVs
U2l6ZSAqIChpbmRleCArIHdpZHRoICsgMSArICgyICogKGluZGV4IC8gKHdpZHRoIC0gMikpKSk7
CisgCQorIAlpbnQgeSA9IChvZmZzZXQgLyBjUGl4ZWxTaXplKSAvIHdpZHRoOworIAlpbnQgeCA9
IChvZmZzZXQgLyBjUGl4ZWxTaXplKSAtICh3aWR0aCAqIHkpOworIAlpbnQgeiA9IHdya1tvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSAqIHN1cmZhY2VTY2FsZTsKKyAJCisgCXBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci54ID0gKHBhaW50aW5nRGF0YS5saWdodFNvdXJjZVBvc2l0aW9uLngg
LSB4KTsKKyAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnkgPSAocGFpbnRpbmdEYXRhLmxp
Z2h0U291cmNlUG9zaXRpb24ueSAtIHkpOworICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iu
eiA9IChwYWludGluZ0RhdGEubGlnaHRTb3VyY2VQb3NpdGlvbi56IC0geik7CisgICAgIHBhaW50
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKHBhaW50aW5nRGF0YS5s
aWdodFZlY3Rvcik7CisgCQorIAlmbG9hdCBjb3NpbmVPZkFuZ2xlID0gdmVjdG9yM0REb3QocGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLCBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yKSAvIHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgaWYgKGNvc2luZU9mQW5nbGUgPiBw
YWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0KQorICAgICB7CisgICAgICAgICAvLyBObyBsaWdo
dCBpcyBwcm9kdWNlZCwgc2NhbmxpbmVzIGFyZSBub3QgdXBkYXRlZAorICAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbG9yVmVjdG9yLnggPSAwLjBmOworICAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9y
VmVjdG9yLnkgPSAwLjBmOworICAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnogPSAw
LjBmOworICAgICB9CisgCisgICAgIC8vIFNldCB0aGUgY29sb3Igb2YgdGhlIHBpeGVsCisgICAg
IGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgIGxpZ2h0U3RyZW5ndGggPSBwb3coLWNvc2luZU9m
QW5nbGUsIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50KTsKKyAKKyAgICAgaWYgKGNvc2lu
ZU9mQW5nbGUgPiBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCkKKyAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggKj0gKHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAv
IChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQpOworIAorICAgICBpZiAobGlnaHRTdHJlbmd0aCA+IDEuMGYpCisgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gMS4wZjsKKyAKKyAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnggPSBwYWlu
dGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnggKiBsaWdodFN0cmVuZ3RoOworICAgICBwYWlu
dGluZ0RhdGEuY29sb3JWZWN0b3IueSA9IHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3Iu
eSAqIGxpZ2h0U3RyZW5ndGg7CisgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56ID0gcGFp
bnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci56ICogbGlnaHRTdHJlbmd0aDsKKyAJCisgCU15
SW50UG9pbnQyRCBub3JtYWwyRFZlY3RvcjsKKyAJaW50IG9mZnNldF90bXAgPSBvZmZzZXQ7Cisg
CQorIAlpbnQgbGVmdCAgICAgICAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldF07CisgCWludCByaWdodCAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJb2Zmc2V0X3RtcCAtPSB3aWR0
aCAqIGNQaXhlbFNpemU7CisgCWludCB0b3BMZWZ0ICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHRvcCAgICAgICAgICA9IHdy
a1tvZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5lbE9mZnNldF07CisgCWludCB0b3BSaWdodCAgICAg
PSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJ
b2Zmc2V0X3RtcCArPSAod2lkdGggKiBjUGl4ZWxTaXplKSA8PCAxOworIAlpbnQgYm90dG9tTGVm
dCAgID0gd3JrW29mZnNldF90bXAgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF07
CisgCWludCBib3R0b20gICAgICAgPSB3cmtbb2Zmc2V0X3RtcCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXRdOworIAlpbnQgYm90dG9tUmlnaHQgID0gd3JrW29mZnNldF90bXAgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldF07CisgCW5vcm1hbDJEVmVjdG9yLnggPSAoLXRvcExlZnQgKyB0
b3BSaWdodCAtIChsZWZ0IDw8IDEpICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRv
bVJpZ2h0KTsKKyAgICAgbm9ybWFsMkRWZWN0b3IueSA9ICgtdG9wTGVmdCAtICh0b3AgPDwgMSkg
LSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOwor
ICAgICAKKyAJTXlGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yOworIAlub3JtYWxWZWN0b3IueCA9
IChjRmFjdG9yMWRpdjQgKiBjb252ZXJ0X2Zsb2F0KG5vcm1hbDJEVmVjdG9yLngpICogc3VyZmFj
ZVNjYWxlKTsKKyAJbm9ybWFsVmVjdG9yLnkgPSAoY0ZhY3RvcjFkaXY0ICogY29udmVydF9mbG9h
dChub3JtYWwyRFZlY3Rvci55KSAqIHN1cmZhY2VTY2FsZSk7CisgCW5vcm1hbFZlY3Rvci56ID0g
MS4wZjsKKyAJCisgCWZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKG5v
cm1hbFZlY3Rvcik7CisgCQorIAlNeUZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yOworIAloYWxm
d2F5VmVjdG9yLnggPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueDsKKyAJaGFsZndheVZlY3Rv
ci55ID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnk7CisgCWhhbGZ3YXlWZWN0b3IueiA9IHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvci56ICsgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3Ro
OworIAkKKyAJZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IHZlY3RvcjNETGVuZ3RoKGhhbGZ3
YXlWZWN0b3IpOworIAorIAlsaWdodFN0cmVuZ3RoID0gc3BlY3VsYXJDb25zdGFudCAqIHBvdyh2
ZWN0b3IzRERvdChub3JtYWxWZWN0b3IsIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxl
bmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBzcGVjdWxhckV4cG9uZW50KTsKKyAJCQorIAls
aWdodFN0cmVuZ3RoID0gY2xhbXAobGlnaHRTdHJlbmd0aCwgMC4wZiwgMS4wZik7CisgCisgCXdy
a1tvZmZzZXRdICAgICA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0
YS5jb2xvclZlY3Rvci54KTsKKyAJd3JrW29mZnNldCArIDFdID0gY29udmVydF91Y2hhcihsaWdo
dFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkpOworIAl3cmtbb2Zmc2V0ICsg
Ml0gPSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3Iueik7CisgfQorIAorIF9fa2VybmVsIHZvaWQgU3BlY3VsYXJMaWdodGluZ0Rpc3RhbnRMaWdo
dChfX2dsb2JhbCB1Y2hhciogd3JrLAorIAkJCQkJCQkJCQkgUGFpbnRpbmdEYXRhT0NMIHBhaW50
aW5nRGF0YSwKKyAJCQkJCQkJICAJCQkgaW50IHdpZHRoLAorIAkJCQkJCQkJCQkgZmxvYXQgc3Vy
ZmFjZVNjYWxlLAorIAkJCQkJCQkgICAJCQkgdWludCBib3VuZGFyeSwKKyAJCQkJCQkJICAgCQkJ
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsCisgCQkJCQkJCSAgIAkJCSBmbG9hdCBzcGVjdWxhckV4
cG9uZW50KQorIHsKKyAJdWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmKGluZGV4
ID49IGJvdW5kYXJ5KQorIAkJcmV0dXJuOworIAorIAlpbnQgb2Zmc2V0ID0gIGNQaXhlbFNpemUg
KiAoaW5kZXggKyB3aWR0aCArIDEgKyAoMiAqIChpbmRleCAvICh3aWR0aCAtIDIpKSkpOworIAkK
KyAJTXlJbnRQb2ludDJEIG5vcm1hbDJEVmVjdG9yOworIAlpbnQgb2Zmc2V0X3RtcCA9IG9mZnNl
dDsKKyAJCisgCWludCBsZWZ0ICAgICAgICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHJpZ2h0ICAgICAgICA9IHdya1tvZmZzZXRf
dG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlvZmZzZXRfdG1wIC09
IHdpZHRoICogY1BpeGVsU2l6ZTsKKyAJaW50IHRvcExlZnQgICAgICA9IHdya1tvZmZzZXRfdG1w
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdOworIAlpbnQgdG9wICAgICAgICAg
ID0gd3JrW29mZnNldF90bXAgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJaW50IHRvcFJpZ2h0
ICAgICA9IHdya1tvZmZzZXRfdG1wICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRd
OworIAlvZmZzZXRfdG1wICs9ICh3aWR0aCAqIGNQaXhlbFNpemUpIDw8IDE7CisgCWludCBib3R0
b21MZWZ0ICAgPSB3cmtbb2Zmc2V0X3RtcCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0XTsKKyAJaW50IGJvdHRvbSAgICAgICA9IHdya1tvZmZzZXRfdG1wICsgY0FscGhhQ2hhbm5l
bE9mZnNldF07CisgCWludCBib3R0b21SaWdodCAgPSB3cmtbb2Zmc2V0X3RtcCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XTsKKyAJbm9ybWFsMkRWZWN0b3IueCA9ICgtdG9wTGVm
dCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBib3R0b21MZWZ0ICsg
Ym90dG9tUmlnaHQpOworICAgICBub3JtYWwyRFZlY3Rvci55ID0gKC10b3BMZWZ0IC0gKHRvcCA8
PCAxKSAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIChib3R0b20gPDwgMSkgKyBib3R0b21SaWdo
dCk7CisgICAgICAgICAKKyAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICAgCisgCU15Rmxv
YXRQb2ludDNEIG5vcm1hbFZlY3RvcjsKKyAJbm9ybWFsVmVjdG9yLnggPSAoY0ZhY3RvcjFkaXY0
ICogY29udmVydF9mbG9hdChub3JtYWwyRFZlY3Rvci54KSAqIHN1cmZhY2VTY2FsZSk7CisgCW5v
cm1hbFZlY3Rvci55ID0gKGNGYWN0b3IxZGl2NCAqIGNvbnZlcnRfZmxvYXQobm9ybWFsMkRWZWN0
b3IueSkgKiBzdXJmYWNlU2NhbGUpOworIAlub3JtYWxWZWN0b3IueiA9IDEuMGY7CisgCQorIAlm
bG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSB2ZWN0b3IzRExlbmd0aChub3JtYWxWZWN0b3IpOwor
IAkKKyAJTXlGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvcjsKKyAJaGFsZndheVZlY3Rvci54ID0g
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLng7CisgCWhhbGZ3YXlWZWN0b3IueSA9IHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci55OworIAloYWxmd2F5VmVjdG9yLnogPSBwYWludGluZ0RhdGEubGln
aHRWZWN0b3IueiArIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAJCisgCWZsb2F0
IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSB2ZWN0b3IzRExlbmd0aChoYWxmd2F5VmVjdG9yKTsKKyAK
KyAJbGlnaHRTdHJlbmd0aCA9IHNwZWN1bGFyQ29uc3RhbnQgKiBwb3codmVjdG9yM0REb3Qobm9y
bWFsVmVjdG9yLCBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5
VmVjdG9yTGVuZ3RoKSwgc3BlY3VsYXJFeHBvbmVudCk7CisgCQkKKyAJbGlnaHRTdHJlbmd0aCA9
IGNsYW1wKGxpZ2h0U3RyZW5ndGgsIDAuMGYsIDEuMGYpOworIAorIAl3cmtbb2Zmc2V0XSAgICAg
PSBjb252ZXJ0X3VjaGFyKGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iu
eCk7CisgCXdya1tvZmZzZXQgKyAxXSA9IGNvbnZlcnRfdWNoYXIobGlnaHRTdHJlbmd0aCAqIHBh
aW50aW5nRGF0YS5jb2xvclZlY3Rvci55KTsKKyAJd3JrW29mZnNldCArIDJdID0gY29udmVydF91
Y2hhcihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnopOworIH0KZGlm
ZiAtcmNOIG9yaWdpbmFsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9vY2wva2VybmVscy9GRU1vcnBob2xvZ3kuY2wgd2Via2l0X29wZW5jbC9X
ZWJLaXQtcjk1MzU4L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2Ns
L2tlcm5lbHMvRkVNb3JwaG9sb2d5LmNsCioqKiBvcmlnaW5hbC9XZWJLaXQtcjk1MzU4L1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL2tlcm5lbHMvRkVNb3JwaG9s
b2d5LmNsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0tLSB3ZWJraXRfb3Bl
bmNsL1dlYktpdC1yOTUzNTgvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9vY2wva2VybmVscy9GRU1vcnBob2xvZ3kuY2wJMjAxMS0xMi0wMiAwODozMTo0My4yODczNzYx
MDEgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAwICoqKioKLS0tIDEsODIgLS0tLQorIC8qCisg
ICogQ29weXJpZ2h0IChDKSAyMDExIFNULU1pY3JvZWxlY3Ryb25pY3MgLSBBdXRob3JzOiBEYXZp
ZCBDb3JpYXQgPGRhdi5jb3JpYXRAZ21haWwuY29tPiwgU3VyaW5kZXIgUGFsIFNpbmdoIDxzdXJp
bmRlci1wYWwuc2luZ2hAc3QuY29tPiwgR2l1bGlvIFVybGluaSA8Z2l1bGlvLnVybGluaUBzdC5j
b20+CisgICoKKyAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICoKKyAg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICoKKyAgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICAqLworIAorIF9fa2VybmVsIHZvaWQgTW9ycGhSZWdpb25BcHBseShfX2ds
b2JhbCB1Y2hhciogaW5EYXRhLCBfX2dsb2JhbCAgdWNoYXIqIG91dERhdGEsIAorIHVpbnQgd2lk
dGgsIHVpbnQgaGVpZ2h0LHVpbnQgcmFkaXVzWCwgdWludCByYWRpdXNZLCB1aW50IG1vZGUpCisg
eworIAl1aW50IGdsb2JhbF9pbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7CisgCWlmIChnbG9iYWxf
aW5kZXggPj0gTlVNX0tFUk5FTFMpIHJldHVybjsKKyAKKyAJaW50IHN0YXJ0WTsKKyAJaW50IGVu
ZFk7CisgCWludCBwb2ludFgsIHBvaW50WSwgeCwgeSwgaTsKKyAJaW50IHBvc19waXhlbDsKKyAJ
aW50IGNvbDsKKyAJaW50IGV4dHJlbWFfaG9yaXpvbnRhbFtNQVhfSE9SSVpPTlRBTF9CVUZGRVJf
U0laRV07CisgCWludCBleHRyZW1hQ29sdW1uOworIAlpbnQgZW50aXJlRXh0cmVtYTsKKyAJaW50
IGFjdHVhbF9waXhlbDsKKyAJaW50IGFjdHVhbFN0YXJ0WSwgYWN0dWFsRW5kWTsKKyAJaW50IGFj
dHVhbFN0YXJ0WCwgYWN0dWFsRW5kWDsKKyAKKyAJaW50IGhvcml6b250YWxfaW5kZXggPSAwOwor
IAkKKyAJaWYgKGdsb2JhbF9pbmRleCA8IE5VTV9LRVJORUxTLTEpIHsKKyAJCXN0YXJ0WSA9IGds
b2JhbF9pbmRleCAqIGhlaWdodC9OVU1fS0VSTkVMUzsKKyAJCWVuZFkgPSAoZ2xvYmFsX2luZGV4
KzEpICogaGVpZ2h0L05VTV9LRVJORUxTOworIAl9IGVsc2UgeworIAkJc3RhcnRZID0gZ2xvYmFs
X2luZGV4ICogaGVpZ2h0L05VTV9LRVJORUxTOworIAkJZW5kWSA9IGhlaWdodDsKKyAJfQorIAor
IAlmb3IgKHBvaW50WSA9IHN0YXJ0WTsgcG9pbnRZIDwgZW5kWTsgcG9pbnRZKyspIHsKKyAJCWZv
ciAocG9pbnRYID0gMDsgcG9pbnRYIDwgd2lkdGg7IHBvaW50WCsrKSB7CisgCQkJYWN0dWFsU3Rh
cnRZID0gKHBvaW50WSAtIHJhZGl1c1kpIDwgMCA/IDAgOiAocG9pbnRZIC0gcmFkaXVzWSk7Cisg
CQkJYWN0dWFsRW5kWSA9IChwb2ludFkgKyByYWRpdXNZKSA+IGhlaWdodCA/IGhlaWdodCA6KHBv
aW50WSArIHJhZGl1c1kpOworIAkJCWFjdHVhbFN0YXJ0WCA9IChwb2ludFggLSByYWRpdXNYKSA8
IDAgPyAwIDogKHBvaW50WCAtIHJhZGl1c1gpOworIAkJCWFjdHVhbEVuZFggPSAocG9pbnRYICsg
cmFkaXVzWCkgPiB3aWR0aCA/IHdpZHRoIDogKHBvaW50WCArIHJhZGl1c1gpOworIAkJCWZvciAo
Y29sID0gMDsgY29sIDwgNCA7IGNvbCArKyApIHsKKyAJCQkJaG9yaXpvbnRhbF9pbmRleCA9IDA7
CisgCQkJCWZvciAoeCA9IGFjdHVhbFN0YXJ0WDsgeCA8IGFjdHVhbEVuZFg7IHggKyspIHsKKyAJ
CQkJCWV4dHJlbWFDb2x1bW4gPSBpbkRhdGFbYWN0dWFsU3RhcnRZICogd2lkdGggKiA0ICsgeCAq
IDQgKyBjb2xdOworIAorIAkJCQkJZm9yICh5ID0gYWN0dWFsU3RhcnRZICsgMTsgeTxhY3R1YWxF
bmRZOyB5KyspIHsKKyAJCQkJCQlhY3R1YWxfcGl4ZWwgPSBpbkRhdGFbeSAqIHdpZHRoICogNCAr
IHggKiA0ICsgY29sXTsKKyAJCQkJCQlpZiAoKChtb2RlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9FUk9ERSkgJiYgKGFjdHVhbF9waXhlbCA8PSBleHRyZW1hQ29sdW1uKSkgfHwKKyAJCQkJCQkJ
CSgobW9kZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFKSAmJiAoYWN0dWFsX3BpeGVs
ID49IGV4dHJlbWFDb2x1bW4pKSkgeworIAkJCQkJCQlleHRyZW1hQ29sdW1uID0gYWN0dWFsX3Bp
eGVsOworIAkJCQkJCX0KKyAJCQkJCX0KKyAJCQkJCWV4dHJlbWFfaG9yaXpvbnRhbFtob3Jpem9u
dGFsX2luZGV4XSA9IGV4dHJlbWFDb2x1bW47CisgCQkJCQlob3Jpem9udGFsX2luZGV4Kys7Cisg
CQkJCX0KKyAJCQkJZW50aXJlRXh0cmVtYSA9IGV4dHJlbWFfaG9yaXpvbnRhbFswXTsKKyAJCQkJ
Zm9yIChpID0gMTsgaSA8IGhvcml6b250YWxfaW5kZXg7IGkrKykgeworIAkJCQkJaWYgKCgobW9k
ZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpICYmIChleHRyZW1hX2hvcml6b250YWxb
aV0gPD0gZW50aXJlRXh0cmVtYSkpIHx8CisgCQkJCQkJCSgobW9kZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRElMQVRFKSAmJiAoZXh0cmVtYV9ob3Jpem9udGFsW2ldID49IGVudGlyZUV4dHJl
bWEpKSkgeworIAkJCQkJCWVudGlyZUV4dHJlbWEgPSBleHRyZW1hX2hvcml6b250YWxbaV07Cisg
CQkJCQl9CisgCQkJCX0KKyAJCQkJb3V0RGF0YVtwb2ludFkgKiB3aWR0aCAqIDQgKyBwb2ludFgg
KiA0ICsgY29sXSA9IGVudGlyZUV4dHJlbWE7CisgCQkJfQorIAkJfQorIAl9CisgfQorIAorIAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122736</attachid>
            <date>2012-01-17 01:41:40 -0800</date>
            <delta_ts>2012-09-12 08:34:57 -0700</delta_ts>
            <desc>opencl</desc>
            <filename>0001-opencl.patch</filename>
            <type>application/octet-stream</type>
            <size>27002</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">RnJvbSBmNGZmMzU4ZTIyYTZkZWRkZWJhZTg3YmEwMDIyN2UwZWEzZTI1YTc3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Q3plbmU9MjBUYW09QzM9QTFzPz0gPGN6ZW5l
QENlbHNpdXMuKG5vbmUpPgpEYXRlOiBUdWUsIDE3IEphbiAyMDEyIDAxOjE3OjI3IC0wODAwClN1
YmplY3Q6IFtQQVRDSF0gb3BlbmNsCgotLS0KIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
aSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCAgfCAgIDg3ICsrKysrCiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCB8ICAgMTEgKwogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwICAgICAgfCAgICAxICsKIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9TVkdGaWx0ZXJzLmggICAgIHwgICA3NiArKysr
KwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL29jbEhlbHBlci5jcHAgICAgfCAg
MzUwICsrKysrKysrKysrKysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wvb2NsSGVscGVyLmggICAgICB8ICAgNjIgKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcCAgICAgfCAgIDE0ICsKIDkgZmlsZXMgY2hhbmdlZCwgNjEy
IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvU1ZHRmlsdGVycy5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9v
Y2wvb2NsSGVscGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvb2NsL29jbEhlbHBlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNGJl
YzIxNC4uM2MyMWVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTM4LDYgKzM5MzgsMTMgQEAgY29udGFp
bnMoQ09ORklHLCBvcGVuZ2wtc2hpbXMpIHsKICAgICBERUZJTkVTICs9IFFUX09QRU5HTF9TSElN
Uz0xCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9PUEVOQ0w9MSkgeworICAgIEhFQURF
UlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvU1ZHRmlsdGVycy5oCisgICAgSEVB
REVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL29jbC9vY2xIZWxwZXIuaAorICAgIFNP
VVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmNwcAorICAg
IERFRklORVMgKz0gT1BFTkNMPTEKK30KKwogIyBNYWtlIHN1cmUgdGhlIGRlcml2ZWQgc291cmNl
cyBhcmUgYnVpbHQKIGluY2x1ZGUoRGVyaXZlZFNvdXJjZXMucHJpKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IDMzMWI0ZjkuLjcyNTZmYWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjU2LDMgKzI1Niw3IEBA
IHVuaXh8d2luMzItZysrKiB7CiAKIGVuYWJsZV9mYXN0X21vYmlsZV9zY3JvbGxpbmc6IERFRklO
RVMgKz0gRU5BQkxFX0ZBU1RfTU9CSUxFX1NDUk9MTElORz0xCiAKK2NvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9PUEVOQ0w9MSl7CisgIFFNQUtFX0xGTEFHUyArPSAtSS91c3IvaW5jbHVkZS8gLUwv
dXNyL2xpYi8KKyAgTElCUyArPSAtbE9wZW5DTAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggNTMwNjM2ZC4uYTM2
YTJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwCkBAIC0zMiw2ICszMiw5IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgogCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgorI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5j
bHVkZSA8b2NsL1NWR0ZpbHRlcnMuaD4KKyNlbmRpZgogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
KCpCbGVuZFR5cGUpKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwg
dW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKTsKIApAQCAtNDEsMTMg
KzQ0LDkyIEBAIEZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyKiBmaWx0ZXIsIEJsZW5kTW9kZVR5cGUg
bW9kZSkKICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCiAgICAgLCBtX21vZGUobW9kZSkKIHsK
KyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIG9jbC5vcGVuY2xTZXR1cFByb2dyYW0oJm1fcHJvZ3Jh
bSwgQmxlbmRLZXJuZWxTb3VyY2UpOworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBG
RUJMRU5EX01PREVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01P
REVfTk9STUFMOgorICAgICAgICBvY2wub3BlbmNsU2V0dXBLZXJuZWwoJm1fcHJvZ3JhbSwgJm1f
a2VybmVsLCAiTm9ybWFsQmxlbmQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5E
X01PREVfTVVMVElQTFk6CisgICAgICAgIG9jbC5vcGVuY2xTZXR1cEtlcm5lbCgmbV9wcm9ncmFt
LCAmbV9rZXJuZWwsICJNdWx0aXBseUJsZW5kIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RkVCTEVORF9NT0RFX1NDUkVFTjoKKyAgICAgICAgb2NsLm9wZW5jbFNldHVwS2VybmVsKCZtX3By
b2dyYW0sICZtX2tlcm5lbCwgIlNjcmVlbkJsZW5kIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRkVCTEVORF9NT0RFX0RBUktFTjoKKyAgICAgICAgb2NsLm9wZW5jbFNldHVwS2VybmVsKCZt
X3Byb2dyYW0sICZtX2tlcm5lbCwgIkRhcmtlbkJsZW5kIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRkVCTEVORF9NT0RFX0xJR0hURU46CisgICAgICAgIG9jbC5vcGVuY2xTZXR1cEtlcm5l
bCgmbV9wcm9ncmFtLCAmbV9rZXJuZWwsICJMaWdodGVuQmxlbmQiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShP
UEVOQ0wpCit9CisKKyNpZiBFTkFCTEUoT1BFTkNMKQorRkVCbGVuZDo6fkZFQmxlbmQoKQorewor
ICAgIGlmIChtX21vZGUgIT0gRkVCTEVORF9NT0RFX1VOS05PV04pCisgICAgICAgIG9jbC5vcGVu
Y2xDbGVhblVwS2VybmVsKCZtX2tlcm5lbCk7CisgICAgb2NsLm9wZW5jbENsZWFuVXBQcm9ncmFt
KCZtX3Byb2dyYW0pOwogfQorI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCiAKIFBhc3NSZWZQdHI8
RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBCbGVuZE1vZGVUeXBlIG1v
ZGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkpOwog
fQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2lubGluZSB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlPQ0woUGFzc1JlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJyYXlBLCBQYXNzUmVmUHRyPEJ5
dGVBcnJheT4gc3JjUGl4ZWxBcnJheUIsIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSkKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gZHN0UGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisKKyAgICBp
ZiAobV9tb2RlID09IEZFQkxFTkRfTU9ERV9VTktOT1dOKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICBkc3RQaXhlbEFycmF5
LT5zZXQoaSwgKHVuc2lnbmVkIGNoYXIpIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2xfbWVtIGFidWY7CisgICAgY2xfbWVtIGJidWY7CisgICAgY2xfbWVtIG91dGJ1ZjsKKwor
ICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogbGVuZ3RoOworCisgICAg
dW5zaWduZWQgaW50IGJvdW5kYXJ5ID0gbGVuZ3RoIC8gNDsKKyAgICBzaXplX3QgYmxlbmRMb2Nh
bFdvcmtTaXplWzFdID0gezF9OworICAgIHNpemVfdCBibGVuZEdsb2JhbFdvcmtTaXplWzFdID0g
ezB9OworCisgICAgd2hpbGUgKGJsZW5kR2xvYmFsV29ya1NpemVbMF0gPCBib3VuZGFyeSkKKyAg
ICAgICAgYmxlbmRHbG9iYWxXb3JrU2l6ZVswXSArPSBibGVuZExvY2FsV29ya1NpemVbMF07CisK
KyAgICBvY2wub3BlbmNsQ3JlYXRlQnVmZmVyKCZhYnVmLCAgIENMX01FTV9SRUFEX1dSSVRFLCBz
aXplKTsKKyAgICBvY2wub3BlbmNsQ3JlYXRlQnVmZmVyKCZiYnVmLCAgIENMX01FTV9SRUFEX1dS
SVRFLCBzaXplKTsKKyAgICBvY2wub3BlbmNsQ3JlYXRlQnVmZmVyKCZvdXRidWYsIENMX01FTV9S
RUFEX1dSSVRFLCBzaXplKTsKKworICAgIG9jbC5vcGVuY2xXcml0ZUJ1ZmZlcigmYWJ1ZiwgMCwg
c2l6ZSwgKHZvaWQqKSBzcmNQaXhlbEFycmF5QS0+ZGF0YSgpKTsKKyAgICBvY2wub3BlbmNsV3Jp
dGVCdWZmZXIoJmJidWYsIDAsIHNpemUsICh2b2lkKikgc3JjUGl4ZWxBcnJheUItPmRhdGEoKSk7
CisKKyAgICBvY2wub3BlbmNsU2V0S2VybmVsQXJnKCZtX2tlcm5lbCwgMCwgc2l6ZW9mKGNsX21l
bSksICh2b2lkKikgJmFidWYpOworICAgIG9jbC5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVs
LCAxLCBzaXplb2YoY2xfbWVtKSwgKHZvaWQqKSAmYmJ1Zik7CisgICAgb2NsLm9wZW5jbFNldEtl
cm5lbEFyZygmbV9rZXJuZWwsIDIsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZvdXRidWYpOwor
ICAgIG9jbC5vcGVuY2xTZXRLZXJuZWxBcmcoJm1fa2VybmVsLCAzLCBzaXplb2YodW5zaWduZWQg
aW50KSwgKHZvaWQqKSAmYm91bmRhcnkpOworCisgICAgb2NsLm9wZW5jbFJ1bktlcm5lbCgmbV9r
ZXJuZWwsIDEsIE5VTEwsIGJsZW5kR2xvYmFsV29ya1NpemUsIGJsZW5kTG9jYWxXb3JrU2l6ZSk7
CisKKyAgICBvY2wub3BlbmNsUmVhZEJ1ZmZlcigmb3V0YnVmLCAwLCBzaXplLCAodm9pZCopIGRz
dFBpeGVsQXJyYXktPmRhdGEoKSk7CisKKyAgICBvY2wub3BlbmNsQ2xlYW5VcEJ1ZmZlcigmYWJ1
Zik7CisgICAgb2NsLm9wZW5jbENsZWFuVXBCdWZmZXIoJmJidWYpOworICAgIG9jbC5vcGVuY2xD
bGVhblVwQnVmZmVyKCZvdXRidWYpOworfQorI2VuZGlmCisKIEJsZW5kTW9kZVR5cGUgRkVCbGVu
ZDo6YmxlbmRNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tb2RlOwpAQCAtMTA0LDYgKzE4
NiwxMCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgSW50UmVj
dCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
Mi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxB
cnJheUIgPSBpbjItPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAK
KyNpZiBFTkFCTEUoT1BFTkNMKSAmJiBVU0VfT1BFTkNMCisgICAgcGxhdGZvcm1BcHBseU9DTChz
cmNQaXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJheUIsIGRzdFBpeGVsQXJyYXkpOworI2Vsc2UKKwog
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7
CiAgICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CkBAIC0xNDEsNiArMjI3LDcgQEAgdm9p
ZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICB1bnNpZ25lZCBjaGFy
IGFscGhhUiA9IDI1NSAtICgoMjU1IC0gYWxwaGFBKSAqICgyNTUgLSBhbHBoYUIpKSAvIDI1NTsK
ICAgICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgYWxwaGFSKTsKICAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkgJiYgVVNFX09QRU5DTAogfQogCiB2b2lkIEZF
QmxlbmQ6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuaAppbmRleCA2OGNkMWQzLi5kOWE4YTBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMjcsNiAr
MjcsMTEgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogCisjaWYgRU5BQkxFKE9QRU5DTCkKKyNp
bmNsdWRlIDxvY2wvb2NsSGVscGVyLmg+CitleHRlcm4gT0NMTGF5ZXIgb2NsOworI2VuZGlmIC8v
IEVOQUJMRShPUEVOQ0wpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCbGVuZE1vZGVU
eXBlIHsKQEAgLTUzLDYgKzU4LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVCbGVuZChG
aWx0ZXIqLCBCbGVuZE1vZGVUeXBlKTsKIAorI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseU9DTChQYXNzUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJh
eUEsIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5QiwgQnl0ZUFycmF5KiBkc3RQ
aXhlbEFycmF5KTsKKyAgICB+RkVCbGVuZCgpOworICAgIGNsX3Byb2dyYW0gbV9wcm9ncmFtOwor
ICAgIGNsX2tlcm5lbCBtX2tlcm5lbDsKKyNlbmRpZgogICAgIEJsZW5kTW9kZVR5cGUgbV9tb2Rl
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBjNjRkMDJjLi4yZGU4MWJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUg
IkZFQ29tcG9zaXRlLmgiCiAKKyNpbmNsdWRlICJzdGRpby5oIgogI2luY2x1ZGUgIkZFQ29tcG9z
aXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvb2NsL1NWR0ZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvb2NsL1NWR0ZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41ZjRlODZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9vY2wvU1ZHRmlsdGVycy5oCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKworY29uc3QgY2hhciogQmxlbmRLZXJuZWxTb3VyY2UgPQorIiNkZWZpbmUg
QkVHSU4obmFtZSkgX19rZXJuZWwgdm9pZCBuYW1lIyNCbGVuZChfX2dsb2JhbCB1Y2hhcjQqIGlu
QSxfX2dsb2JhbCAgdWNoYXI0KiBpbkIsX19nbG9iYWwgIHVjaGFyNCogb3V0LCB1aW50IGJvdW5k
YXJ5KSB7XFxcbiJcCisidWludCBpbmRleCA9IGdldF9nbG9iYWxfaWQoMCk7IFxcXG4iXAorImlm
KGluZGV4ID49IGJvdW5kYXJ5KVxcXG4iXAorIiAgIHJldHVybjtcXFxuIlwKKyJmbG9hdDQgQSA9
IGNvbnZlcnRfZmxvYXQ0KGluQVtpbmRleF0pO1xcXG4iXAorImZsb2F0NCBCID0gY29udmVydF9m
bG9hdDQoaW5CW2luZGV4XSk7XFxcbiJcCisiZmxvYXQ0IE87XG4iXAorCisiI2RlZmluZSBFTkQg
b3V0W2luZGV4XSA9IGNvbnZlcnRfdWNoYXI0KE8pO1xcXG4iXAorIn1cbiJcCisKKyJCRUdJTihO
b3JtYWwpXG4iXAorImZsb2F0IGFscGhhID0gQS53IC8gMjU1LjBmO1xuIlwKKyJPLnggPSAoKDEu
MGYgLSBhbHBoYSkgKiBCLnggKyBBLngpO1xuIlwKKyJPLnkgPSAoKDEuMGYgLSBhbHBoYSkgKiBC
LnkgKyBBLnkpO1xuIlwKKyJPLnogPSAoKDEuMGYgLSBhbHBoYSkgKiBCLnogKyBBLnopO1xuIlwK
KyJPLncgPSAoMS4wZiAtICgoMS4wZiAtIGFscGhhKSAqICgxLjBmIC0gQi53IC8gMjU1LjBmKSkp
ICogMjU1LjBmO1xuIlwKKyJFTkRcbiJcCisKKyJCRUdJTihNdWx0aXBseSlcbiJcCisiZmxvYXQg
YWxwaGExID0gQS53IC8gMjU1LjBmO1xuIlwKKyJmbG9hdCBhbHBoYTIgPSBCLncgLyAyNTUuMGY7
XG4iXAorCisiTy54ID0gKCgxLjBmIC0gYWxwaGExKSAqIEIueCArICgxLjBmIC0gYWxwaGEyICsg
Qi54IC8gMjU1LjBmKSAqIEEueCk7XG4iXAorIk8ueSA9ICgoMS4wZiAtIGFscGhhMSkgKiBCLnkg
KyAoMS4wZiAtIGFscGhhMiArIEIueSAvIDI1NS4wZikgKiBBLnkpO1xuIlwKKyJPLnogPSAoKDEu
MGYgLSBhbHBoYTEpICogQi56ICsgKDEuMGYgLSBhbHBoYTIgKyBCLnogLyAyNTUuMGYpICogQS56
KTtcbiJcCisiTy53ID0gKDEuMGYgLSAoKDEuMGYgLSBhbHBoYTEpICogKDEuMGYgLSBhbHBoYTIp
KSkgKiAyNTUuMGY7XG4iXAorIkVORFxuIlwKKworIkJFR0lOKFNjcmVlbilcbiJcCisiTy54ID0g
KChCLnggKyBBLngpIC0gKEEueCAqIEIueCkgLyAyNTUuMGYpO1xuIlwKKyJPLnkgPSAoKEIueSAr
IEEueSkgLSAoQS55ICogQi55KSAvIDI1NS4wZik7XG4iXAorIk8ueiA9ICgoQi56ICsgQS56KSAt
IChBLnogKiBCLnopIC8gMjU1LjBmKTtcbiJcCisiTy53ID0gKDEuMGYgLSAoKDEuMGYgLSBBLncg
LyAyNTUuMGYpICogKDEuMGYgLSBCLncgLyAyNTUuMGYpKSkgKiAyNTUuMGY7XG4iXAorIkVORFxu
IlwKKworIkJFR0lOKERhcmtlbilcbiJcCisiZmxvYXQgYWxwaGExID0gQS53IC8gMjU1LjBmO1xu
IlwKKyJmbG9hdCBhbHBoYTIgPSBCLncgLyAyNTUuMGY7XG4iXAorCisiTy54ID0gKG1pbigoMS4w
ZiAtIGFscGhhMSkgKiBCLnggKyBBLngsICgxLjBmIC0gYWxwaGEyKSAqIEEueCArIEIueCkpO1xu
IlwKKyJPLnkgPSAobWluKCgxLjBmIC0gYWxwaGExKSAqIEIueSArIEEueSwgKDEuMGYgLSBhbHBo
YTIpICogQS55ICsgQi55KSk7XG4iXAorIk8ueiA9IChtaW4oKDEuMGYgLSBhbHBoYTEpICogQi56
ICsgQS56LCAoMS4wZiAtIGFscGhhMikgKiBBLnogKyBCLnopKTtcbiJcCisiTy53ID0gKDEuMGYg
LSAoKDEuMGYgLSBhbHBoYTEpICogKDEuMGYgLSBhbHBoYTIpKSkgKiAyNTUuMGY7XG4iXAorIkVO
RFxuIlwKKworIkJFR0lOKExpZ2h0ZW4pXG4iXAorImZsb2F0IGFscGhhMSA9IEEudyAvIDI1NS4w
ZjtcbiJcCisiZmxvYXQgYWxwaGEyID0gQi53IC8gMjU1LjBmO1xuIlwKKworIk8ueCA9IChtYXgo
KDEuMGYgLSBhbHBoYTEpICogQi54ICsgQS54LCAoMS4wZiAtIGFscGhhMikgKiBBLnggKyBCLngp
KTtcbiJcCisiTy55ID0gKG1heCgoMS4wZiAtIGFscGhhMSkgKiBCLnkgKyBBLnksICgxLjBmIC0g
YWxwaGEyKSAqIEEueSArIEIueSkpO1xuIlwKKyJPLnogPSAobWF4KCgxLjBmIC0gYWxwaGExKSAq
IEIueiArIEEueiwgKDEuMGYgLSBhbHBoYTIpICogQS56ICsgQi56KSk7XG4iXAorIk8udyA9ICgx
LjBmIC0gKCgxLjBmIC0gYWxwaGExKSAqICgxLjBmIC0gYWxwaGEyKSkpICogMjU1LjBmO1xuIlwK
KyJFTkQiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9vY2wvb2NsSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvb2NsL29jbEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2FhNWU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvb2NsL29jbEhlbHBlci5jcHAKQEAgLTAsMCArMSwzNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVjdHJvbmljcyAtIEF1dGhvcnM6IERh
dmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBTdXJpbmRlciBQYWwgU2luZ2ggPHN1
cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJsaW5pIDxnaXVsaW8udXJsaW5pQHN0
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRl
ICJvY2xIZWxwZXIuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIE9DTExheWVyOjpvcGVu
Y2xTZXR1cENvbW1vbigpCit7CisgICAgZXJyb3IgPSBjbEdldFBsYXRmb3JtSURzKDEsICZwbGF0
Zm9ybSwgTlVMTCk7CisgICAgaWYgKGVycm9yICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJFcnJvciBhdCBjbEdldFBsYXRmb3JtSURzOiAiKTsKKyAgICAgICAgb3Bl
bmNsUHJpbnRFcnJvcigpOworICAgIH0KKworICAgIGVycm9yID0gY2xHZXREZXZpY2VJRHMocGxh
dGZvcm0sIENMX0RFVklDRV9UWVBFX0dQVSwgMSwgJmRldmljZSwgTlVMTCk7CisgICAgaWYgKGVy
cm9yICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBhdCBj
bEdldERldmljZUlEczogIik7CisgICAgICAgIG9wZW5jbFByaW50RXJyb3IoKTsKKyAgICB9CisK
KyAgICBjb250ZXh0ID0gY2xDcmVhdGVDb250ZXh0KDAsIDEsICZkZXZpY2UsIE5VTEwsIE5VTEws
ICZlcnJvcik7CisgICAgaWYgKGVycm9yICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFcnJvciBhdCBjbENyZWF0ZUNvbnRleHQ6ICIpOworICAgICAgICBvcGVuY2xQ
cmludEVycm9yKCk7CisgICAgfQorCisgICAgY29tbWFuZFF1ZXVlID0gY2xDcmVhdGVDb21tYW5k
UXVldWUoY29udGV4dCwgZGV2aWNlLCBDTF9RVUVVRV9QUk9GSUxJTkdfRU5BQkxFLCAmZXJyb3Ip
OworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRXJyb3IgYXQgY2xDcmVhdGVDb21tYW5kUXVldWU6ICIpOworICAgICAgICBvcGVuY2xQcmlu
dEVycm9yKCk7CisgICAgfQorfQorCit2b2lkIE9DTExheWVyOjpvcGVuY2xTZXR1cFByb2dyYW0o
Y2xfcHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgY2hhcioga2VybmVsc291cmNlKQoreworICAgIG9w
ZW5jbFNldHVwUHJvZ3JhbShwcm9ncmFtLCBrZXJuZWxzb3VyY2UsICItY2wtZmFzdC1yZWxheGVk
LW1hdGgiKTsKK30KK3ZvaWQgT0NMTGF5ZXI6Om9wZW5jbFNldHVwUHJvZ3JhbShjbF9wcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBjaGFyKiBrZXJuZWxzb3VyY2UsIGNvbnN0IGNoYXIqIGNvbXBpbGVP
cHRpb25zKQoreworICAgIGNoYXIqIHJlc3VsdCA9IE5VTEw7CisgICAgc2l6ZV90IHJldHVyblNp
emUgPSAwOworCisgICAgKnByb2dyYW0gPSBjbENyZWF0ZVByb2dyYW1XaXRoU291cmNlKGNvbnRl
eHQsIDEsIChjb25zdCBjaGFyICoqKSAma2VybmVsc291cmNlLCBOVUxMLCAmZXJyb3IpOworICAg
IGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy
b3IgYXQgY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZTogIik7CisgICAgICAgIG9wZW5jbFByaW50
RXJyb3IoKTsKKyAgICB9CisKKyAgICBlcnJvciA9IGNsQnVpbGRQcm9ncmFtKCpwcm9ncmFtLCAw
LCBOVUxMLCBjb21waWxlT3B0aW9ucywgTlVMTCwgTlVMTCk7CisgICAgaWYgKGVycm9yICE9IENM
X1NVQ0NFU1MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBidWlsZCBwcm9n
cmFtIik7CisgICAgICAgIHJlc3VsdCA9IChjaGFyICopbWFsbG9jKDEgPDwgMTYpOworICAgICAg
ICBlcnJvciA9IGNsR2V0UHJvZ3JhbUJ1aWxkSW5mbygqcHJvZ3JhbSwgZGV2aWNlLCBDTF9QUk9H
UkFNX0JVSUxEX0xPRywgMSA8PCAxNiAsIHJlc3VsdCwgJnJldHVyblNpemUpOworICAgICAgICBp
ZiAoZXJyb3IgIT0gQ0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciBhdCBjbEdldFByb2dyYW1CdWlsZEluZm86ICIpOworICAgICAgICAgICAgb3BlbmNsUHJp
bnRFcnJvcigpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5TaXplID4gMCkKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29tcGlsYXRpb24gbG9nOiAlcyAgJWQgKCVkKVxuIiwg
cmVzdWx0LCAoaW50KSByZXR1cm5TaXplLCAxIDw8IDE2KTsKKyAgICAgICAgZXhpdChFWElUX0ZB
SUxVUkUpOworICAgIH0KK30KKwordm9pZCBPQ0xMYXllcjo6b3BlbmNsU2V0dXBLZXJuZWwoY2xf
cHJvZ3JhbSogcHJvZ3JhbSwgY2xfa2VybmVsKiBrZXJuZWwsIGNvbnN0IGNoYXIqIGtlcm5lbG5h
bWUpCit7CisgICAgKmtlcm5lbCA9IGNsQ3JlYXRlS2VybmVsKCpwcm9ncmFtLCBrZXJuZWxuYW1l
LCAmZXJyb3IpOworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xDcmVhdGVLZXJuZWw6ICIpOworICAgICAgICBvcGVuY2xQ
cmludEVycm9yKCk7CisgICAgfQorfQorCit2b2lkIE9DTExheWVyOjpvcGVuY2xDcmVhdGVCdWZm
ZXIoY2xfbWVtKiBidWYsIGNvbnN0IGNsX21lbV9mbGFncyBmbGFncywgY29uc3Qgc2l6ZV90IHNp
emUpCit7CisgICAgKmJ1ZiA9IGNsQ3JlYXRlQnVmZmVyKGNvbnRleHQsIGZsYWdzLCBzaXplLCBO
VUxMLCAmZXJyb3IpOworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xDcmVhdGVCdWZmZXI6ICIpOworICAgICAgICBvcGVu
Y2xQcmludEVycm9yKCk7CisgICAgfQorfQorCit2b2lkIE9DTExheWVyOjpvcGVuY2xXcml0ZUJ1
ZmZlcihjbF9tZW0qIGJ1ZiwgY29uc3Qgc2l6ZV90IG9mZnNldCwgY29uc3Qgc2l6ZV90IHNpemUs
IGNvbnN0IHZvaWQqIHNyYykKK3sKKyAgICBjbF9ldmVudCBldmVudDsKKworICAgIGVycm9yID0g
Y2xFbnF1ZXVlV3JpdGVCdWZmZXIoY29tbWFuZFF1ZXVlLCAqYnVmLCBDTF9UUlVFLCBvZmZzZXQs
IHNpemUsIHNyYywgMCwgTlVMTCwgJmV2ZW50KTsKKyAgICBpZiAoZXJyb3IgIT0gQ0xfU1VDQ0VT
UykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsRW5xdWV1ZVdyaXRlQnVm
ZmVyOiAiKTsKKyAgICAgICAgb3BlbmNsUHJpbnRFcnJvcigpOworICAgIH0KKworICAgIGNsUmVs
ZWFzZUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBPQ0xMYXllcjo6b3BlbmNsU2V0S2VybmVsQXJn
KGNsX2tlcm5lbCoga2VybmVsLCBjb25zdCB1bnNpZ25lZCBpbnQgYXJnSWQsIGNvbnN0IHNpemVf
dCBzaXplLCBjb25zdCB2b2lkKiBhcmcpCit7CisgICAgZXJyb3IgPSBjbFNldEtlcm5lbEFyZygq
a2VybmVsLCBhcmdJZCwgc2l6ZSwgYXJnKTsKKyAgICBpZiAoZXJyb3IgIT0gQ0xfU1VDQ0VTUykg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsU2V0S2VybmVsQXJnOiAiKTsK
KyAgICAgICAgb3BlbmNsUHJpbnRFcnJvcigpOworICAgIH0KK30KKwordm9pZCBPQ0xMYXllcjo6
b3BlbmNsUnVuS2VybmVsKGNsX2tlcm5lbCoga2VybmVsLCBjb25zdCB1bnNpZ25lZCBpbnQgZGlt
LCBjb25zdCBzaXplX3QqIG9mZnNldCwgY29uc3Qgc2l6ZV90KiBnbG9iYWxTaXplLCBjb25zdCBz
aXplX3QqIGxvY2FsU2l6ZSkKK3sKKyAgICBjbF9ldmVudCBldmVudDsKKworICAgIGVycm9yID0g
Y2xFbnF1ZXVlTkRSYW5nZUtlcm5lbChjb21tYW5kUXVldWUsICprZXJuZWwsIGRpbSwgb2Zmc2V0
LCBnbG9iYWxTaXplLCBsb2NhbFNpemUsIDAsIE5VTEwsICZldmVudCk7CisgICAgaWYgKGVycm9y
ICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsRW5x
dWV1ZU5EUmFuZ2VLZXJuZWw6ICIpOworICAgICAgIG9wZW5jbFByaW50RXJyb3IoKTsKKyAgICB9
CisKKworICAgIGNsUmVsZWFzZUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBPQ0xMYXllcjo6b3Bl
bmNsUnVuS2VybmVsVGFzayhjbF9rZXJuZWwqIGtlcm5lbCkKK3sKKyAgICBjbF9ldmVudCBldmVu
dDsKKyAgICBlcnJvciA9IGNsRW5xdWV1ZVRhc2soY29tbWFuZFF1ZXVlLCAqa2VybmVsLCAwLCBO
VUxMLCAmZXZlbnQpOworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xFbnF1ZXVlVGFzazogIik7CisgICAgICAgIG9wZW5j
bFByaW50RXJyb3IoKTsKKyAgICB9CisKKyAgICBjbFJlbGVhc2VFdmVudChldmVudCk7Cit9CisK
K3ZvaWQgT0NMTGF5ZXI6Om9wZW5jbFJlYWRCdWZmZXIoY2xfbWVtKiBidWYsIGNvbnN0IHNpemVf
dCBvZmZzZXQsIGNvbnN0IHNpemVfdCBzaXplLCB2b2lkKiBkc3QpCit7CisgICAgY2xfZXZlbnQg
ZXZlbnQ7CisKKyAgICBlcnJvciA9IGNsRW5xdWV1ZVJlYWRCdWZmZXIoY29tbWFuZFF1ZXVlLCAq
YnVmLCBDTF9UUlVFLCBvZmZzZXQsIHNpemUsIGRzdCwgMCwgTlVMTCwgJmV2ZW50KTsKKyAgICBp
ZiAoZXJyb3IgIT0gQ0xfU1VDQ0VTUykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
IGF0IGNsRW5xdWV1ZVJlYWRCdWZmZXI6ICIpOworICAgICAgICBvcGVuY2xQcmludEVycm9yKCk7
CisgICAgfQorCisgICAgY2xSZWxlYXNlRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE9DTExheWVy
OjpvcGVuY2xDbGVhblVwQnVmZmVyKGNsX21lbSogYnVmKQoreworICAgIGVycm9yID0gY2xSZWxl
YXNlTWVtT2JqZWN0KCpidWYpOworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsUmVsZWFzZU1lbU9iamVjdDogIik7CisgICAg
ICBvcGVuY2xQcmludEVycm9yKCk7CisgICAgfQorfQorCit2b2lkIE9DTExheWVyOjpvcGVuY2xD
bGVhblVwS2VybmVsKGNsX2tlcm5lbCoga2VybmVsKQoreworICAgIGVycm9yID0gY2xSZWxlYXNl
S2VybmVsKCprZXJuZWwpOworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xSZWxlYXNlS2VybmVsOiAiKTsKKyAgICAgICAg
b3BlbmNsUHJpbnRFcnJvcigpOworICAgIH0KK30KKwordm9pZCBPQ0xMYXllcjo6b3BlbmNsQ2xl
YW5VcFByb2dyYW0oY2xfcHJvZ3JhbSAqcHJvZ3JhbSkKK3sKKyAgICBlcnJvciA9IGNsUmVsZWFz
ZVByb2dyYW0oKnByb2dyYW0pOworICAgIGlmIChlcnJvciAhPSBDTF9TVUNDRVNTKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQgY2xSZWxlYXNlUHJvZ3JhbTogIik7CisgICAg
ICAgIG9wZW5jbFByaW50RXJyb3IoKTsKKyAgICB9Cit9CisKK3ZvaWQgT0NMTGF5ZXI6Om9wZW5j
bENsZWFuVXBDb21tb24oKQoreworICAgIGVycm9yID0gY2xSZWxlYXNlQ29tbWFuZFF1ZXVlKGNv
bW1hbmRRdWV1ZSk7CisgICAgaWYgKGVycm9yICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJFcnJvciBhdCBjbFJlbGVhc2VDb21tYW5kUXVldWU6ICIpOworICAgICAg
ICBvcGVuY2xQcmludEVycm9yKCk7CisgICAgfQorICAgIGVycm9yID0gY2xSZWxlYXNlQ29udGV4
dChjb250ZXh0KTsKKyAgICBpZiAoZXJyb3IgIT0gQ0xfU1VDQ0VTUykgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkVycm9yIGF0IGNsUmVsZWFzZUNvbnRleHQ6ICIpOworICAgICAgICBvcGVu
Y2xQcmludEVycm9yKCk7CisgICAgfQorfQorCit2b2lkIE9DTExheWVyOjpvcGVuY2xQcmludEVy
cm9yKCkKK3sKKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBDTF9ERVZJQ0VfTk9UX0ZP
VU5EOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0RFVklDRV9OT1RfRk9VTkRcbiIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0RFVklDRV9OT1RfQVZBSUxBQkxFOgorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNMX0RFVklDRV9OT1RfQVZBSUxBQkxFXG4iKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDTF9DT01QSUxFUl9OT1RfQVZBSUxBQkxFOgorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNMX0NPTVBJTEVSX05PVF9BVkFJTEFCTEVcbiIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENMX01FTV9PQkpFQ1RfQUxMT0NBVElPTl9GQUlMVVJFOgorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNMX01FTV9PQkpFQ1RfQUxMT0NBVElPTl9GQUlMVVJFXG4iKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9PVVRfT0ZfUkVTT1VSQ0VTOgorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNMX09VVF9PRl9SRVNPVVJDRVNcbiIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENMX09VVF9PRl9IT1NUX01FTU9SWToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
TF9PVVRfT0ZfSE9TVF9NRU1PUllcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX1BS
T0ZJTElOR19JTkZPX05PVF9BVkFJTEFCTEU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xf
UFJPRklMSU5HX0lORk9fTk9UX0FWQUlMQUJMRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0xfTUVNX0NPUFlfT1ZFUkxBUDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9NRU1f
Q09QWV9PVkVSTEFQXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTUFHRV9GT1JN
QVRfTUlTTUFUQ0g6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU1BR0VfRk9STUFUX01J
U01BVENIXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTUFHRV9GT1JNQVRfTk9U
X1NVUFBPUlRFRDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTUFHRV9GT1JNQVRfTk9U
X1NVUFBPUlRFRFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfQlVJTERfUFJPR1JB
TV9GQUlMVVJFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0JVSUxEX1BST0dSQU1fRkFJ
TFVSRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfTUFQX0ZBSUxVUkU6CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfTUFQX0ZBSUxVUkVcbiIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENMX0lOVkFMSURfVkFMVUU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xf
SU5WQUxJRF9WQUxVRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9E
RVZJQ0VfVFlQRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0RFVklDRV9U
WVBFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1BMQVRGT1JNOgor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfUExBVEZPUk1cbiIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfREVWSUNFOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNMX0lOVkFMSURfREVWSUNFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
TF9JTlZBTElEX0NPTlRFWFQ6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9D
T05URVhUXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1FVRVVFX1BS
T1BFUlRJRVM6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9RVUVVRV9QUk9Q
RVJUSUVTXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0NPTU1BTkRf
UVVFVUU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9DT01NQU5EX1FVRVVF
XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0hPU1RfUFRSOgorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfSE9TVF9QVFJcbiIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfTUVNX09CSkVDVDoKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDTF9JTlZBTElEX01FTV9PQkpFQ1RcbiIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENMX0lOVkFMSURfSU1BR0VfRk9STUFUX0RFU0NSSVBUT1I6CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ0xfSU5WQUxJRF9JTUFHRV9GT1JNQVRfREVTQ1JJUFRPUlxuIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9JTUFHRV9TSVpFOgorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNMX0lOVkFMSURfSU1BR0VfU0laRVxuIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ0xfSU5WQUxJRF9TQU1QTEVSOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lO
VkFMSURfU0FNUExFUlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9C
SU5BUlk6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9CSU5BUllcbiIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfQlVJTERfT1BUSU9OUzoKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0JVSUxEX09QVElPTlNcbiIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfUFJPR1JBTToKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDTF9JTlZBTElEX1BST0dSQU1cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENMX0lOVkFMSURfUFJPR1JBTV9FWEVDVVRBQkxFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNMX0lOVkFMSURfUFJPR1JBTV9FWEVDVVRBQkxFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDTF9JTlZBTElEX0tFUk5FTF9OQU1FOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNM
X0lOVkFMSURfS0VSTkVMX05BTUVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lO
VkFMSURfS0VSTkVMX0RFRklOSVRJT046CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5W
QUxJRF9LRVJORUxfREVGSU5JVElPTlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xf
SU5WQUxJRF9LRVJORUw6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9LRVJO
RUxcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfQVJHX0lOREVYOgor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQVJHX0lOREVYXG4iKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0FSR19WQUxVRToKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJDTF9JTlZBTElEX0FSR19WQUxVRVxuIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ0xfSU5WQUxJRF9BUkdfU0laRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9J
TlZBTElEX0FSR19TSVpFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElE
X0tFUk5FTF9BUkdTOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfS0VSTkVM
X0FSR1NcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfV09SS19ESU1F
TlNJT046CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9XT1JLX0RJTUVOU0lP
TlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9XT1JLX0dST1VQX1NJ
WkU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9XT1JLX0dST1VQX1NJWkVc
biIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfV09SS19JVEVNX1NJWkU6
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9XT1JLX0lURU1fU0laRVxuIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9HTE9CQUxfT0ZGU0VUOgorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfR0xPQkFMX09GRlNFVFxuIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9FVkVOVF9XQUlUX0xJU1Q6CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9FVkVOVF9XQUlUX0xJU1RcbiIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfRVZFTlQ6CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ0xfSU5WQUxJRF9FVkVOVFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xf
SU5WQUxJRF9PUEVSQVRJT046CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9P
UEVSQVRJT05cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfR0xfT0JK
RUNUOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfR0xfT0JKRUNUXG4iKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0JVRkZFUl9TSVpFOgorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQlVGRkVSX1NJWkVcbiIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfTUlQX0xFVkVMOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNMX0lOVkFMSURfTUlQX0xFVkVMXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDTF9JTlZBTElEX0dMT0JBTF9XT1JLX1NJWkU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q0xfSU5WQUxJRF9HTE9CQUxfV09SS19TSVpFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGVycm9yIGNvZGUgOiAlZFxu
IiwgZXJyb3IpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
T1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9vY2wvb2NsSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL29jbC9vY2xIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jOTM2NDVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9vY2wvb2NsSGVscGVyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBTVC1NaWNyb2VsZWN0cm9uaWNzIC0gQXV0aG9yczogRGF2aWQgQ29y
aWF0IDxkYXYuY29yaWF0QGdtYWlsLmNvbT4sIFN1cmluZGVyIFBhbCBTaW5naCA8c3VyaW5kZXIt
cGFsLnNpbmdoQHN0LmNvbT4sIEdpdWxpbyBVcmxpbmkgPGdpdWxpby51cmxpbmlAc3QuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIG9jbEhlbHBlcl9oCisjZGVmaW5lIG9jbEhlbHBlcl9oCisKKyNpZiBFTkFCTEUoT1BF
TkNMKQorCisjaW5jbHVkZSAiQ0wvY2wuaCIKKworI2RlZmluZSBVU0VfT1BFTkNMIDEKKworI2Rl
ZmluZSBNQVhfQVJSQVlfU0laRSA1MTIKKyNkZWZpbmUgTUFYX1BMQVRGT1JNUyAxMAorI2RlZmlu
ZSBNQVhfREVWSUNFUyAxMAorCitjbGFzcyBPQ0xMYXllciB7CitwdWJsaWM6CisgICAgdm9pZCBv
cGVuY2xTZXR1cENvbW1vbigpOworICAgIHZvaWQgb3BlbmNsU2V0dXBQcm9ncmFtKGNsX3Byb2dy
YW0qLCBjb25zdCBjaGFyKiBmaWxlbmFtZSk7CisgICAgdm9pZCBvcGVuY2xTZXR1cFByb2dyYW0o
Y2xfcHJvZ3JhbSosIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBjb21waWxlT3B0
aW9ucyk7CisgICAgdm9pZCBvcGVuY2xTZXR1cEtlcm5lbChjbF9wcm9ncmFtKiwgY2xfa2VybmVs
KiwgY29uc3QgY2hhcioga2VybmVsbmFtZSk7CisgICAgdm9pZCBvcGVuY2xDcmVhdGVCdWZmZXIo
Y2xfbWVtKiBidWYsIGNvbnN0IGNsX21lbV9mbGFncywgY29uc3Qgc2l6ZV90KTsKKyAgICB2b2lk
IG9wZW5jbFdyaXRlQnVmZmVyKGNsX21lbSogYnVmLCBjb25zdCBzaXplX3Qgb2Zmc2V0LCBjb25z
dCBzaXplX3QsIGNvbnN0IHZvaWQqIHNyYyk7CisgICAgdm9pZCBvcGVuY2xTZXRLZXJuZWxBcmco
Y2xfa2VybmVsKiwgY29uc3QgdW5zaWduZWQgaW50IGFyZ0lkLCBjb25zdCBzaXplX3QsIGNvbnN0
IHZvaWQqIGFyZyk7CisgICAgdm9pZCBvcGVuY2xSdW5LZXJuZWwoY2xfa2VybmVsKiwgY29uc3Qg
dW5zaWduZWQgaW50IGRpbSwgY29uc3Qgc2l6ZV90KiBvZmZzZXQsIGNvbnN0IHNpemVfdCogZ2xv
YmFsX3NpemUsIGNvbnN0IHNpemVfdCogbG9jYWxfc2l6ZSk7CisgICAgdm9pZCBvcGVuY2xSdW5L
ZXJuZWxUYXNrKGNsX2tlcm5lbCopOworICAgIHZvaWQgb3BlbmNsUmVhZEJ1ZmZlcihjbF9tZW0q
IGJ1ZiwgY29uc3Qgc2l6ZV90IG9mZnNldCwgY29uc3Qgc2l6ZV90LCB2b2lkKiBkc3QpOworICAg
IHZvaWQgb3BlbmNsQ2xlYW5VcEJ1ZmZlcihjbF9tZW0qIGJ1Zik7CisgICAgdm9pZCBvcGVuY2xD
bGVhblVwS2VybmVsKGNsX2tlcm5lbCopOworICAgIHZvaWQgb3BlbmNsQ2xlYW5VcFByb2dyYW0o
Y2xfcHJvZ3JhbSopOworICAgIHZvaWQgb3BlbmNsQ2xlYW5VcENvbW1vbigpOworCitwcml2YXRl
OgorICAgIHZvaWQgb3BlbmNsUHJpbnRFcnJvcigpOworCisgICAgY2xfaW50IGVycm9yOworICAg
IGNsX3BsYXRmb3JtX2lkIHBsYXRmb3JtOworICAgIGNsX2RldmljZV9pZCBkZXZpY2U7CisgICAg
Y2xfY29udGV4dCBjb250ZXh0OworICAgIGNsX2NvbW1hbmRfcXVldWUgY29tbWFuZFF1ZXVlOwor
fTsKKworI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisKKyNlbmRpZiAvLyBvY2xIZWxwZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXgg
Njk5NDY1NC4uMjdhNDk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
LCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1QtTWljcm9lbGVj
dHJvbmljcyAtIEF1dGhvcnM6IERhdmlkIENvcmlhdCA8ZGF2LmNvcmlhdEBnbWFpbC5jb20+LCBT
dXJpbmRlciBQYWwgU2luZ2ggPHN1cmluZGVyLXBhbC5zaW5naEBzdC5jb20+LCBHaXVsaW8gVXJs
aW5pIDxnaXVsaW8udXJsaW5pQHN0LmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTAsNiAr
NTEsMTIgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgPG9jbC9vY2xIZWxwZXIuaD4KKy8vIE9DTExh
eWVyIGNsYXNzIGRlY2xhcmVkIGdsb2JhbCBmb3IgZWFzeSBhY2Nlc3MgKFRPRE86IEZpbmQgYSBi
ZXR0ZXIgcGxhY2UgZm9yIHRoaXMuLi4pCitPQ0xMYXllciBvY2w7CisjZW5kaWYgLy8gRU5BQkxF
KE9QRU5DTCkKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNjEsMTAgKzY4LDE3IEBAIFJlbmRlclNWR1Jvb3Q6OlJlbmRlclNWR1Jvb3QoU1ZHU3R5bGVk
RWxlbWVudCogbm9kZSkKICAgICAsIG1fbmVlZHNTaXplTmVnb3RpYXRpb25XaXRoSG9zdERvY3Vt
ZW50KGZhbHNlKQogewogICAgIHNldFJlcGxhY2VkKHRydWUpOworI2lmIEVOQUJMRShPUEVOQ0wp
CisgICAgZnByaW50ZihzdGRlcnIsICJvcGVuY2xjb21tb24gY2FsbGVkIVxuIik7CisgICAgb2Ns
Lm9wZW5jbFNldHVwQ29tbW9uKCk7CisjZW5kaWYKIH0KIAogUmVuZGVyU1ZHUm9vdDo6flJlbmRl
clNWR1Jvb3QoKQogeworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgb2NsLm9wZW5jbENsZWFuVXBD
b21tb24oKTsKKyNlbmRpZgogfQogCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5z
aWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVy
Y2VudGFnZUludHJpbnNpY1NpemUpIGNvbnN0Ci0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>126041</attachid>
            <date>2012-02-08 03:12:34 -0800</date>
            <delta_ts>2012-02-08 03:12:34 -0800</delta_ts>
            <desc>Updated OpenCL patch and performance figures.</desc>
            <filename>Performance Figures.zip</filename>
            <type>application/octet-stream</type>
            <size>70925</size>
            <attacher name="Himal Ghimiray">ghimire.himal</attacher>
            
              <data encoding="base64">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
AAAAAgACAH8AAAB4FAEAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>141390</attachid>
            <date>2012-05-11 06:01:11 -0700</date>
            <delta_ts>2012-09-12 08:34:57 -0700</delta_ts>
            <desc>Example implementation - OpenCL</desc>
            <filename>0001-opencl.patch</filename>
            <type>application/octet-stream</type>
            <size>101346</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">RnJvbSAyNDdhMjI1NDY2ZWZhMWYyOThjNjdhZDBkNjg4MzRkZGY2ZTg2MWY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Q3plbmU9MjBUYW09QzM9QTFzPz0gPGN6ZW5l
QENlbHNpdXMuKG5vbmUpPgpEYXRlOiBGcmksIDExIE1heSAyMDEyIDA1OjQ2OjE1IC0wNzAwClN1
YmplY3Q6IFtQQVRDSF0gb3BlbmNsCgotLS0KIC4uLi9TVkdGRUZsb29kRWxlbWVudC1kb20tZmxv
b2QtY29sb3ItYXR0ci5qcyAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiAuLi4vV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwICB8ICAgIDQgKwogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggfCAgICAzICsKIC4uLi9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwICAgIHwgICAgOCArCiAuLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggICAgICB8ICAgIDMgKwog
Li4uL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgICAgICAgfCAgICA4
ICsKIC4uLi9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCAgICAgICAgIHwg
ICAgMyArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgICAg
ICB8ICAgIDMgKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgg
ICAgICAgIHwgICAgMyArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcCB8ICAgIDggKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oICAgfCAgICAzICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q3VzdG9tRmlsdGVyLmNwcCAgIHwgICAgOCArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUN1c3RvbUZpbHRlci5oICAgICB8ICAgIDMgKwogLi4uL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwICAgICAgICAgfCAgICA4ICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggIHwgICAgMyArCiAuLi4vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwICAgICB8ICAgIDggKwogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggICAgICAgfCAgICAzICsKIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIHwgICAgMyArCiAuLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oICAgICB8ICAgIDMgKwog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgICAgICAgfCAgICA4
ICsKIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIHwg
ICAgMyArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3Bw
ICB8ICAgIDggKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmggfCAgICAzICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAgICAgIHwgICAgOCArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaCAgICAgICB8ICAgIDMgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAgfCAgICAzICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmggICB8ICAgIDMgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggIHwgICAgMyArCiAuLi4vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwICAgICB8ICAgIDggKwogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggICAgICAgfCAgICAzICsKIC4uLi9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgICAgIHwgICA2OCArKystCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCAgICAgICB8ICAgMjMg
Ky0KIC4uLi9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xDb250ZXh0LmNwcCAgICAgIHwg
IDI0MSArKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xD
b250ZXh0LmggICAgICAgIHwgICA3OCArKysrKwogLi4uL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNM
L09wZW5DTEZFQmxlbmQuY3BwICAgICAgfCAgMTg1ICsrKysrKysrKysrCiAuLi4vZ3JhcGhpY3Mv
ZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVDb21wb3NpdGUuY3BwICB8ICAzMjUgKysrKysrKysrKysr
KysrKysrKysKIC4uLi9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUNvbXBvc2l0ZS5jcHAuYXV0b3Nh
dmUgIHwgIDMyNSArKysrKysrKysrKysrKysrKysrKwogLi4uL2dyYXBoaWNzL2ZpbHRlcnMvT3Bl
bkNML09wZW5DTEZFRmxvb2QuY3BwICAgICAgfCAgIDk0ICsrKysrKwogLi4uL2ZpbHRlcnMvT3Bl
bkNML09wZW5DTEZFR2F1c3NpYW5CbHVyLmNwcCAgICAgICAgfCAgIDY3ICsrKysKIC4uLi9ncmFw
aGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUltYWdlLmNwcCAgICAgIHwgICA0MyArKysKIC4u
Li9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRU9mZnNldC5jcHAgICAgIHwgIDEwNCAr
KysrKysrCiAuLi4vZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAgICAgICAg
ICB8ICAgNjMgKysrKwogLi4uL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlR3JhcGhpYy5j
cHAgICAgICAgfCAgIDUwICsrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuaCAgICAgICAgfCAgICAzICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuaCAgICAgIHwgICAgMyArCiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcCB8ICAgIDcgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCAgIHwgICAgMyArCiA1MCBmaWxlcyBjaGFuZ2VkLCAx
ODQxIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMQ29udGV4
dC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xDb250ZXh0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUJsZW5k
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFQ29tcG9zaXRlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZF
Q29tcG9zaXRlLmNwcC5hdXRvc2F2ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFRmxvb2QuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9P
cGVuQ0wvT3BlbkNMRkVHYXVzc2lhbkJsdXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVJbWFnZS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL09wZW5DTC9PcGVuQ0xGRU9mZnNldC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVNvdXJj
ZUFscGhhLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdmcvZHluYW1pYy11cGRhdGVzL3NjcmlwdC10ZXN0cy9TVkdGRUZs
b29kRWxlbWVudC1kb20tZmxvb2QtY29sb3ItYXR0ci5qcyBiL0xheW91dFRlc3RzL3N2Zy9keW5h
bWljLXVwZGF0ZXMvc2NyaXB0LXRlc3RzL1NWR0ZFRmxvb2RFbGVtZW50LWRvbS1mbG9vZC1jb2xv
ci1hdHRyLmpzCmluZGV4IGViMmEwZGEuLmFmNzcyZTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N2Zy9keW5hbWljLXVwZGF0ZXMvc2NyaXB0LXRlc3RzL1NWR0ZFRmxvb2RFbGVtZW50LWRvbS1m
bG9vZC1jb2xvci1hdHRyLmpzCisrKyBiL0xheW91dFRlc3RzL3N2Zy9keW5hbWljLXVwZGF0ZXMv
c2NyaXB0LXRlc3RzL1NWR0ZFRmxvb2RFbGVtZW50LWRvbS1mbG9vZC1jb2xvci1hdHRyLmpzCkBA
IC02LDcgKzYsNyBAQCBjcmVhdGVTVkdUZXN0Q2FzZSgpOwogCiB2YXIgZmxvb2RFbGVtZW50ID0g
Y3JlYXRlU1ZHRWxlbWVudCgiZmVGbG9vZCIpOwogZmxvb2RFbGVtZW50LnNldEF0dHJpYnV0ZSgi
Zmxvb2QtY29sb3IiLCAicmdiKDE0NSwgMzIsIDEwMykiKTsKLWZsb29kRWxlbWVudC5zZXRBdHRy
aWJ1dGUoImZsb29kLW9wYWNpdHkiLCAiLjgiKTsKK2Zsb29kRWxlbWVudC5zZXRBdHRyaWJ1dGUo
ImZsb29kLW9wYWNpdHkiLCAiLjUiKTsKIAogdmFyIGZpbHRlckVsZW1lbnQgPSBjcmVhdGVTVkdF
bGVtZW50KCJmaWx0ZXIiKTsKIGZpbHRlckVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsICJteUZp
bHRlciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNzIyYmMxMy4uZWRkOTcwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC00MDcxLDYgKzQwNzEsMjAgQEAgY29udGFpbnMoQ09ORklHLCBvcGVuZ2wtc2hpbXMpIHsKICAg
ICBERUZJTkVTICs9IFFUX09QRU5HTF9TSElNUz0xCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9PUEVOQ0w9MSkgeworICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9PcGVuQ0wvT3BlbkNMQ29udGV4dC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xDb250ZXh0LmNwcAorICAgIFNPVVJDRVMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVJbWFnZS5jcHAKKyAgICBTT1VSQ0VT
ICs9IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFQ29tcG9zaXRlLmNw
cAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNM
RkVCbGVuZC5jcHAKKyAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3Bl
bkNML09wZW5DTEZFRmxvb2QuY3BwCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUdhdXNzaWFuQmx1ci5jcHAKKyAgICBTT1VSQ0VTICs9IHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFT2Zmc2V0LmNwcAorICAgIFNP
VVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVTb3VyY2VH
cmFwaGljLmNwcAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVu
Q0wvT3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAKKyAgICBERUZJTkVTICs9IE9QRU5DTD0xCit9CisK
ICMgTWFrZSBzdXJlIHRoZSBkZXJpdmVkIHNvdXJjZXMgYXJlIGJ1aWx0CiBpbmNsdWRlKERlcml2
ZWRTb3VyY2VzLnByaSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCBmNzYxY2U5Li45NTM1MzBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnByaQpAQCAtMjgzLDYgKzI4MywxMSBAQCB1bml4fHdpbjMyLWcrKyogewogICAgIGhh
dmVRdCg1KTogUU1BS0VfUEtHQ09ORklHX1JFUVVJUkVTICs9IFF0V2lkZ2V0cwogfQogCitjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfT1BFTkNMPTEpeworICBRTUFLRV9MRkxBR1MgKz0gLUkvdXNy
L2luY2x1ZGUvIC1ML3Vzci9saWIvCisgIExJQlMgKz0gLWxPcGVuQ0wKK30KKwogIyBEaXNhYmxl
IEMrKzB4IG1vZGUgaW4gV2ViQ29yZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQgaXQgaW4gdGhlaXIg
UXQncyBta3NwZWMKICotZysrKjpRTUFLRV9DWFhGTEFHUyAtPSAtc3RkPWMrKzB4IC1zdGQ9Z251
KysweAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcAppbmRleCA1MzA2MzZkLi45MTkxZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTQxLDYg
KzQxLDcgQEAgRkVCbGVuZDo6RkVCbGVuZChGaWx0ZXIqIGZpbHRlciwgQmxlbmRNb2RlVHlwZSBt
b2RlKQogICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fbW9kZShtb2RlKQogewor
ICAgIHByaW50ZigiRkVCbGVuZDo6XG4iKTsKIH0KIAogUGFzc1JlZlB0cjxGRUJsZW5kPiBGRUJs
ZW5kOjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIEJsZW5kTW9kZVR5cGUgbW9kZSkKQEAgLTg4LDYg
Kzg5LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGxpZ2h0ZW4odW5zaWduZWQgY2hh
ciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLAogCiB2b2lkIEZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7CisgICAgcHJpbnRmKCJGRUJsZW5kIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZVxuIik7CisKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIApAQCAtMTQxLDYgKzE0NCw3IEBA
IHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgdW5zaWduZWQg
Y2hhciBhbHBoYVIgPSAyNTUgLSAoKDI1NSAtIGFscGhhQSkgKiAoMjU1IC0gYWxwaGFCKSkgLyAy
NTU7CiAgICAgICAgIGRzdFBpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGFscGhhUik7
CiAgICAgfQorCiB9CiAKIHZvaWQgRkVCbGVuZDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDY4Y2QxZDMuLjdi
OGFlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oCkBAIC00Niw2ICs0Niw5IEBAIHB1YmxpYzoKICAgICBib29sIHNldEJsZW5k
TW9kZShCbGVuZE1vZGVUeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFw
cGx5T3BlbkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDAwYjYwMGEuLjk4MmM2
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTkwLDYgKzE5MCwxNCBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgcmVzdWx0SW1hZ2UtPnB1dEJ5
dGVBcnJheShVbm11bHRpcGxpZWQsIHBpeGVsQXJyYXkuZ2V0KCksIGltYWdlUmVjdC5zaXplKCks
IGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKKworI2lmIEVOQUJMRShPUEVOQ0wpCitib29s
IEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIHJldHVybiB0cnVl
OworfQorI2VuZGlmCisKIHZvaWQgRkVDb2xvck1hdHJpeDo6ZHVtcCgpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5oCmluZGV4IDI3YTRhYzguLjUxNzdhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC00OSw2
ICs0OSw5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5B
QkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2Vu
ZGlmCiAjaWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlTa2lhKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDhkYjYyZGMuLmEy
Yzk5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTgyLDYgKzE4Miwx
NCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgfQogfQogCisKKyNpZiBFTkFCTEUoT1BFTkNMKQorYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVy
OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
CiB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmR1bXAoKQogewogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuaAppbmRleCBkNDYxZGVmLi4zMGE4NWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuaApAQCAtNzksNiArNzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHBoYUZ1bmN0
aW9uKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOwogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXgg
NWJlMjJmOC4uZTZkNTg1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0Lmgi
CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotCisjaW5jbHVkZSAic3RkaW8uaCIKICNpbmNsdWRl
IDx3dGYvQnl0ZUFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIzMCw3ICsyMzAs
NiBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICBpbjItPmNvcHlQcmVtdWx0
aXBsaWVkSW1hZ2UoZHN0UGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0KTsKLQogICAgICAg
ICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShzcmNQaXhlbEFycmF5LmdldCgpLCBkc3RQaXhl
bEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaAppbmRleCAyNGJhMzA3Li4xM2QyOGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC02Miw2
ICs2Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBs
eU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguY3BwCmluZGV4IGNkYTVmMTkuLmY0ZjIxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcApAQCAtNDc2LDYgKzQ3NiwxNCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiAgICAgfQogfQogCisKKyNpZiBFTkFCTEUoT1BFTkNMKQorYm9vbCBG
RUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmR1bXAoKQogewogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguaAppbmRleCAzNGJhZjZmLi40Y2ZmNGVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaApAQCAtNzMsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFs
cGhhKGJvb2wpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwor
I2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0wo
KTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKaW5k
ZXggMjNiNmZlMS4uNDRlYTZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKQEAgLTEzNCw2ICsx
MzQsMTQgQEAgdm9pZCBGRUN1c3RvbUZpbHRlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBtZW1jcHkoZHN0UGl4ZWxBcnJheS0+ZGF0YSgpLCBncHVSZXN1bHQtPmRhdGEoKSwgZ3B1UmVz
dWx0LT5sZW5ndGgoKSk7CiB9CiAKKworI2lmIEVOQUJMRShPUEVOQ0wpCitib29sIEZFQ3VzdG9t
RmlsdGVyOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZgorCiB2b2lkIEZFQ3VzdG9tRmlsdGVyOjppbml0aWFsaXplQ29udGV4dChjb25zdCBJbnRT
aXplJiBjb250ZXh0U2l6ZSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCmluZGV4IDQ5NmYwNDQuLmUzNTc1OTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21G
aWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q3VzdG9tRmlsdGVyLmgKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOwogCiAgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVh
bCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcAppbmRleCBiMGVhYzQ0Li5lYmQzMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cApAQCAtMTMzLDYgKzEzMywxNCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIH0KIH0KIAorCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIHJldHVybiB0cnVl
OworfQorI2VuZGlmCisKIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmR1bXAoKQogewogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDZkOWJkZmUuLjUyOWQxYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmgKQEAgLTUxLDYgKzUxLDkgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U2NhbGUo
ZmxvYXQpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsK
KyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAzZGQ1
YTI3Li5hZjQwZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMTcsNiArMTE3LDE0IEBAIHZv
aWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCktPmRyYXdJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHJhd2luZ1JlZ2lvbik7CiB9CiAKKworI2lmIEVOQUJMRShPUEVOQ0wpCitib29sIEZF
RHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisjZW5kaWYKKwogdm9pZCBGRURyb3BTaGFkb3c6OmR1bXAoKQogewogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgK
aW5kZXggZDE1NWI0Ni4uY2MyZTY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC01Miw2ICs1Miw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlU3RkRGV2aWF0aW9uKGZsb2F0KTsK
IAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUo
T1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYK
ICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmluZGV4IGUwNDg0YjQuLmU3OGI2NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC00
MCw2ICs0MCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNldEZsb29kT3BhY2l0eShmbG9hdCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdCht
YXhFZmZlY3RSZWN0KCkpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IGIyOTVkMzYuLjVjNjVm
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTQxLDYgKzQxLDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBmbG9hdCBjYWxjdWxhdGVTdGREZXZpYXRpb24oZmxvYXQpOwogCiAgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmly
dHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBlNzk1ZDM1Li5jNGNkMWQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAKQEAgLTQwNiw2ICs0MDYsMTQgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogICAgIGRyYXdMaWdodGluZyhzcmNQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6
ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CiB9CiAKKworI2lmIEVOQUJM
RShPUEVOQ0wpCitib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShGSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCA1NDI2ZjkxLi5lOWEzYmUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuaApAQCAtNDYsNiArNDYsOSBAQCBzdHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0
YUZvck5lb247CiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJM
RShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRp
ZgogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuY3BwCmluZGV4IGVkZGI2MWEuLjU0MDE4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtNTcsNiArNTcsMTQg
QEAgdm9pZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIH0KIH0KIAorCisj
aWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogdm9pZCBGRU1lcmdlOjpkdW1wKCkKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmgKaW5kZXggMzAyMzM2Yi4uZmI0ZjRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTM0LDYgKzM0LDkgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXIqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BF
TkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYKICAg
ICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAppbmRleCA1YmE0ZGZjLi43MjI3MzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBA
IC0yMjUsNiArMjI1LDE0IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgIHBsYXRmb3JtQXBwbHkoJnBhaW50aW5nRGF0YSk7CiB9CiAKKworI2lmIEVOQUJM
RShPUEVOQ0wpCitib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogdm9pZCBGRU1vcnBob2xvZ3k6OmR1bXAoKQog
ewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNTQyZDI2Yi4uZTVhZjFjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
CkBAIC00Nyw2ICs0Nyw5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwog
CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShP
UEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgog
I2lmIFVTRShTS0lBKQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U2tpYSgpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwCmluZGV4IGVmMmM0NjYuLmIzYzdiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0zMCw3
ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKLQorI2luY2x1ZGUgInN0ZGlv
LmgiCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFT2Zmc2V0OjpGRU9mZnNldChGaWx0ZXIqIGZp
bHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQpAQCAtOTEsNiArOTEsNyBAQCB2b2lkIEZFT2Zmc2V0
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7CiAgICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2Nh
bGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbik7CisgICAgcHJpbnRmKCJhbnnDoWQiKTsK
IH0KIAogdm9pZCBGRU9mZnNldDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggZTc1ZmViZC4uZDUxMDIzYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaApAQCAtMzksNiArMzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREeShmbG9hdCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxF
KE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlm
CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzZGI3YTdjLi4wNGQxYzE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCkBAIC04NSw2ICs4NSwxMyBAQCB2b2lkIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVUaWxlOjpwbGF0Zm9y
bUFwcGx5T3BlbkNMKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIEZF
VGlsZTo6ZHVtcCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCA2MzMyNzZhLi5kZTY1ZDYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTMzLDYg
KzMzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFVGlsZT4gY3JlYXRlKEZp
bHRlciogZmlsdGVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5k
ZXggZDVkNjRjMS4uNjUwNzY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNDAxLDYgKzQwMSwx
NCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBmaWxs
UmVnaW9uKHBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgMCwgYWJzb2x1dGVQYWludFJlY3QoKS5o
ZWlnaHQoKSk7CiB9CiAKKworI2lmIEVOQUJMRShPUEVOQ0wpCitib29sIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwog
dm9pZCBGRVR1cmJ1bGVuY2U6OmR1bXAoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXggNTkyNTdk
MC4uNjU4MjM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC02MSw2ICs2MSw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDliZjE2ODkuLjc4YmZmNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAKQEAgLTMyLDcgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZp
bHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciogZmlsdGVyKQorI2lmIEVOQUJMRShPUEVO
Q0wpCisgICAgOiBtX29wZW5jbEltYWdlUmVzdWx0KDApCisgICAgLCBtX2FscGhhSW1hZ2UoZmFs
c2UpCisjZWxzZQogICAgIDogbV9hbHBoYUltYWdlKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX2Zp
bHRlcihmaWx0ZXIpCiAgICAgLCBtX2hhc1goZmFsc2UpCiAgICAgLCBtX2hhc1koZmFsc2UpCkBA
IC00NSw2ICs1MCwxMSBAQCBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXIqIGZpbHRl
cikKIAogRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkKIHsKKyNpZiBFTkFCTEUoT1BFTkNM
KQorICAgIGlmIChtX29wZW5jbEltYWdlUmVzdWx0KQorICAgICAgICBjbFJlbGVhc2VNZW1PYmpl
Y3QobV9vcGVuY2xJbWFnZVJlc3VsdCk7CisKKyNlbmRpZgogfQogCiBpbmxpbmUgYm9vbCBpc0Zp
bHRlclNpemVWYWxpZChJbnRSZWN0IHJlY3QpCkBAIC0xMDcsMTIgKzExNywxOCBAQCB2b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RGaWx0ZXJSZXN1bHRJ
Zk5lZWRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBh
cHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCisjaWYgRU5BQkxFKE9QRU5D
TCkKKyAgICBpZiAocGxhdGZvcm1BcHBseU9wZW5DTCgpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogI2lmIFVTRShTS0lBKQogICAgIGlmIChwbGF0Zm9ybUFwcGx5U2tpYSgpKQogICAgICAg
ICByZXR1cm47CiAjZW5kaWYKKwogICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogfQogCkBA
IC0xNTMsNiArMTY5LDEyIEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiAgICAg
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmNs
ZWFyKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuY2xJbWFnZVJlc3VsdCl7
CisgICAgICAgIGNsUmVsZWFzZU1lbU9iamVjdChtX29wZW5jbEltYWdlUmVzdWx0KTsKKyAgICAg
ICAgbV9vcGVuY2xJbWFnZVJlc3VsdCA9IDA7CisgICAgfQorI2VuZGlmCiB9CiAKIEltYWdlQnVm
ZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQpAQCAtMTYxLDYgKzE4MywxMCBAQCBJ
bWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKG1fb3BlbmNs
SW1hZ2VSZXN1bHQpCisgICAgICAgIHJldHVybiBnZXRPcGVuQ0xJbWFnZVJlc3VsdCgpOworI2Vu
ZGlmCiAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VMaW5lYXJSR0IsIG1fZmlsdGVyLT5y
ZW5kZXJpbmdNb2RlKCkpOwogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCkBAIC0xNzAsNiArMTk2LDI5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6
OmFzSW1hZ2VCdWZmZXIoKQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwog
fQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmdldE9w
ZW5DTEltYWdlUmVzdWx0KCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0g
RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKwor
ICAgIHNpemVfdCBvcmlnaW5bM10gPSB7IDAsIDAsIDAgfTsKKyAgICBzaXplX3QgcmVnaW9uWzNd
ID0geyBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVp
Z2h0KCksIDF9OworCisgICAgUmVmUHRyPEJ5dGVBcnJheT4gZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNv
bHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOworCisgICAgY2xfaW50IGVyID0gY2xFbnF1ZXVl
UmVhZEltYWdlKGNvbnRleHQtPmNvbW1hbmRRdWV1ZSgpLCBtX29wZW5jbEltYWdlUmVzdWx0LCBD
TF9UUlVFLCBvcmlnaW4sIHJlZ2lvbiwgMCwgMCwgZGVzdGluYXRpb25QaXhlbEFycmF5LT5kYXRh
KCksIDAsIDAsIDApOworICAgIGlmIChlciAhPSBDTF9TVUNDRVNTKQorICAgICAgICBjb250ZXh0
LT5PcGVuQ0xQcmludEVycm9yKGVyKTsKKworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0
IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
CisgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KFVubXVsdGlwbGllZCwgZGVz
dGluYXRpb25QaXhlbEFycmF5LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5h
dGlvblJlY3QsIEludFBvaW50KCkpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEZpbHRlckVmZmVjdDo6
YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChp
c0ZpbHRlclNpemVWYWxpZChyZWN0KSk7CkBAIC0zMjksNiArMzc4LDIzIEBAIEJ5dGVBcnJheSog
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIHJldHVy
biBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVO
Q0wpCitjbF9tZW0gRmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2UpCit7CisgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgY2xfaW1h
Z2VfZm9ybWF0IGNsSW1hZ2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVs
X29yZGVyID0gQ0xfUkdCQTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90
eXBlID0gQ0xfVU5PUk1fSU5UODsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQg
PSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgIGNsX2ludCBlcjsKKyAgICBtX29wZW5jbEltYWdlUmVzdWx0ID0gY2xDcmVhdGVJbWFnZTJE
KGNvbnRleHQtPmRldmljZUNvbnRleHQoKSwgc291cmNlID8gKENMX01FTV9SRUFEX1dSSVRFIHwg
Q0xfTUVNX0NPUFlfSE9TVF9QVFIpIDogQ0xfTUVNX1JFQURfV1JJVEUsCisgICAgICAgICZjbElt
YWdlRm9ybWF0LCBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJl
Y3QuaGVpZ2h0KCksIDAsIHNvdXJjZSwgJmVyKTsKKyAgICByZXR1cm4gbV9vcGVuY2xJbWFnZVJl
c3VsdDsKK30KKyNlbmRpZgorCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRpdmVzIGhl
cmUgbGF0ZXIuIFRoaXMgaXNuJ3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDhiNGFkNmYuLjY4ODExOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgRU5BQkxFKE9QRU5DTCkKKyNpbmNs
dWRlICJPcGVuQ0wvT3BlbkNMQ29udGV4dC5oIgorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBmbG9h
dCBrTWF4RmlsdGVyU2l6ZSA9IDUwMDAuMGY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYx
LDYgKzY1LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShCeXRl
QXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBjb3B5UHJlbXVs
dGlwbGllZEltYWdlKEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKIAor
I2lmIEVOQUJMRShPUEVOQ0wpCisgICAgY2xfbWVtIGFzT3BlbkNMSW1hZ2UoKSB7IHJldHVybiBt
X29wZW5jbEltYWdlUmVzdWx0OyB9CisgICAgSW1hZ2VCdWZmZXIqIGdldE9wZW5DTEltYWdlUmVz
dWx0KCk7CisjZW5kaWYKKwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkg
eyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0
KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNv
bnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQpAQCAtNjgsNyArNzcsMTEgQEAg
cHVibGljOgogICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0CiAgICAgewogICAgICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhl
IG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorI2lmIEVOQUJM
RShPUEVOQ0wpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0IHx8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9vcGVu
Y2xJbWFnZVJlc3VsdDsKKyNlbHNlCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7CisjZW5kaWYKICAgICB9CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwpAQCAtOTUsNiArMTA4LDkgQEAgcHVibGljOgogI2lm
IFVTRShTS0lBKQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U2tpYSgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUFwcGx5T3BlbkNMKCkgPSAwOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
QEAgLTEzNSw3ICsxNTEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgQnl0ZUFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwogICAgIEJ5dGVBcnJheSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0KKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIGNsX21lbSBjcmVhdGVPcGVuQ0xJbWFnZVJl
c3VsdCh1bnNpZ25lZCBjaGFyKiA9IDApOworI2VuZGlmCiAgICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1
ZXMsIHdpdGgKICAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVu
dCBpbiBbMCwgYWxwaGFdLgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlw
bGllZFBpeGVscygpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTE0OCw2ICsxNjYsOSBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxCeXRlQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAg
UmVmUHRyPEJ5dGVBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgRmlsdGVy
RWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgY2xf
bWVtIG1fb3BlbmNsSW1hZ2VSZXN1bHQ7CisjZW5kaWYKIAogICAgIGJvb2wgbV9hbHBoYUltYWdl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L09wZW5DTC9PcGVuQ0xDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjZjZWJiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xDb250ZXh0LmNwcApAQCAt
MCwwICsxLDI0MSBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE9QRU5DTCkK
KyNpbmNsdWRlICJPcGVuQ0xDb250ZXh0LmgiCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVk
ZSA8dGltZS5oPgorI2luY2x1ZGUgInN0ZGlvLmgiCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zp
bHRlckNvbnRleHRPcGVuQ0wqIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKQoreworICAg
ICBjbG9ja190IHN0YXJ0ID0gY2xvY2soKTsKKyAgICAgc3RhdGljIGJvb2wgd2FzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKKyAgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSAw
OworCisgICAgIGlmICh3YXNJbml0aWFsaXplZCkKKyAgICAgICAgIHJldHVybiBjb250ZXh0Owor
CisgICAgIHdhc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgY29udGV4dCA9IG5ldyBGaWx0ZXJD
b250ZXh0T3BlbkNMKCk7CisgICAgIC8vIEluaXRpYWxpemluZyB0aGUgY29udGV4dC4KKyAgICAg
Y2xfaW50IGVyck51bTsKKyAgICAgY2xfZGV2aWNlX2lkICpkZXZpY2VzOworICAgICBjbF9wbGF0
Zm9ybV9pZCBmaXJzdFBsYXRmb3JtSWQ7CisgICAgIHNpemVfdCBkZXZpY2VCdWZmZXJTaXplID0g
LTE7CisKKyAgICAgZXJyTnVtID0gY2xHZXRQbGF0Zm9ybUlEcygxLCAmZmlyc3RQbGF0Zm9ybUlk
LCBOVUxMKTsKKyAgICAgY2xfY29udGV4dF9wcm9wZXJ0aWVzIGNvbnRleHRQcm9wZXJ0aWVzW10g
PSB7IENMX0NPTlRFWFRfUExBVEZPUk0sIChjbF9jb250ZXh0X3Byb3BlcnRpZXMpZmlyc3RQbGF0
Zm9ybUlkLCAwfTsKKyAgICAgY29udGV4dC0+bV9kZXZpY2VDb250ZXh0ID0gY2xDcmVhdGVDb250
ZXh0RnJvbVR5cGUoY29udGV4dFByb3BlcnRpZXMsIENMX0RFVklDRV9UWVBFX0dQVSwgTlVMTCwg
TlVMTCwgJmVyck51bSk7CisgICAgIGlmIChlcnJOdW0gIT0gQ0xfU1VDQ0VTUykgeworICAgICAg
ICAgY29udGV4dC0+bV9kZXZpY2VDb250ZXh0ID0gY2xDcmVhdGVDb250ZXh0RnJvbVR5cGUoY29u
dGV4dFByb3BlcnRpZXMsIENMX0RFVklDRV9UWVBFX0NQVSwgTlVMTCwgTlVMTCwgJmVyck51bSk7
CisgICAgICAgICBpZiAoZXJyTnVtICE9IENMX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4g
Y29udGV4dDsKKyAgICAgfQorCisgICAgIGVyck51bSA9IGNsR2V0Q29udGV4dEluZm8oY29udGV4
dC0+bV9kZXZpY2VDb250ZXh0LCBDTF9DT05URVhUX0RFVklDRVMsIDAsIE5VTEwsICZkZXZpY2VC
dWZmZXJTaXplKTsKKyAgICAgaWYgKGVyck51bSAhPSBDTF9TVUNDRVNTKQorICAgICAgICAgcmV0
dXJuIGNvbnRleHQ7CisKKyAgICAgaWYgKGRldmljZUJ1ZmZlclNpemUgPD0gMCkKKyAgICAgICAg
IHJldHVybiBjb250ZXh0OworCisgICAgIGRldmljZXMgPSBuZXcgY2xfZGV2aWNlX2lkW2Rldmlj
ZUJ1ZmZlclNpemUgLyBzaXplb2YoY2xfZGV2aWNlX2lkKV07CisgICAgIGVyck51bSA9IGNsR2V0
Q29udGV4dEluZm8oY29udGV4dC0+bV9kZXZpY2VDb250ZXh0LCBDTF9DT05URVhUX0RFVklDRVMs
IGRldmljZUJ1ZmZlclNpemUsIGRldmljZXMsIE5VTEwpOworICAgICBpZiAoZXJyTnVtICE9IENM
X1NVQ0NFU1MpCisgICAgICAgICByZXR1cm4gY29udGV4dDsKKworICAgICBjb250ZXh0LT5tX2Nv
bW1hbmRRdWV1ZSA9IGNsQ3JlYXRlQ29tbWFuZFF1ZXVlKGNvbnRleHQtPm1fZGV2aWNlQ29udGV4
dCwgZGV2aWNlc1swXSwgMCwgTlVMTCk7CisgICAgIGlmIChjb250ZXh0LT5tX2NvbW1hbmRRdWV1
ZSA9PSBOVUxMKQorICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisKKyAgICAgY29udGV4dC0+bV9k
ZXZpY2UgPSBkZXZpY2VzWzBdOworICAgICBkZWxldGUgW10gZGV2aWNlczsKKworICAgICBjbF9i
b29sIGltYWdlU3VwcG9ydCA9IENMX0ZBTFNFOworICAgICBjbEdldERldmljZUluZm8oY29udGV4
dC0+bV9kZXZpY2UsIENMX0RFVklDRV9JTUFHRV9TVVBQT1JULCBzaXplb2YoY2xfYm9vbCksICZp
bWFnZVN1cHBvcnQsIE5VTEwpOworICAgICBpZiAoaW1hZ2VTdXBwb3J0ICE9IENMX1RSVUUpCisg
ICAgICAgICByZXR1cm4gY29udGV4dDsKKworCisgICAgIC8vIE5vdGU6IENvbnRleHQgbXVzdCBi
ZSBmcmVlZCBvbiBlcnJvciEKKworICAgICBwcmludGYoIkNvbnRleHQgdGltZTogJWxkXG4iLCAo
Y2xvY2soKS1zdGFydCkvKi8gKGRvdWJsZSkgQ0xPQ0tTX1BFUl9TRUMqLyk7CisgICAgIHJldHVy
biBjb250ZXh0OworfQorCitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQ
cm9ncmFtKGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBjbF9pbnQgZXJyTnVtOworICAgIGNs
X3Byb2dyYW0gcHJvZ3JhbTsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBG
aWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBwcm9ncmFtID0gY2xDcmVhdGVQ
cm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LT5tX2RldmljZUNvbnRleHQsIDEsIChjb25zdCBjaGFy
KiopICZzb3VyY2UsIE5VTEwsICZlcnJOdW0pOworICAgIE9wZW5DTFByaW50RXJyb3IoZXJyTnVt
KTsKKyAgICBpZiAoZXJyTnVtICE9IENMX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgZXJyTnVtID0gY2xCdWlsZFByb2dyYW0ocHJvZ3JhbSwgMCwgMCwgMCwgMCwgMCk7CisgICAg
T3BlbkNMUHJpbnRFcnJvcihlcnJOdW0pOworICAgIGlmIChlcnJOdW0gIT0gQ0xfU1VDQ0VTUykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KKwordm9pZCBGaWx0
ZXJDb250ZXh0T3BlbkNMOjpPcGVuQ0xQcmludEVycm9yKGNsX2ludCBlcnJvcikKK3sKKyAgICBz
d2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBDTF9TVUNDRVNTOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNMX1NVQ0NFU1NcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0RFVklD
RV9OT1RfRk9VTkQ6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfREVWSUNFX05PVF9GT1VO
RFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfREVWSUNFX05PVF9BVkFJTEFCTEU6
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfREVWSUNFX05PVF9BVkFJTEFCTEVcbiIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0NPTVBJTEVSX05PVF9BVkFJTEFCTEU6CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfQ09NUElMRVJfTk9UX0FWQUlMQUJMRVxuIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ0xfTUVNX09CSkVDVF9BTExPQ0FUSU9OX0ZBSUxVUkU6Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfTUVNX09CSkVDVF9BTExPQ0FUSU9OX0ZBSUxVUkVc
biIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX09VVF9PRl9SRVNPVVJDRVM6CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfT1VUX09GX1JFU09VUkNFU1xuIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ0xfT1VUX09GX0hPU1RfTUVNT1JZOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNMX09VVF9PRl9IT1NUX01FTU9SWVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0xfUFJPRklMSU5HX0lORk9fTk9UX0FWQUlMQUJMRToKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDTF9QUk9GSUxJTkdfSU5GT19OT1RfQVZBSUxBQkxFXG4iKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDTF9NRU1fQ09QWV9PVkVSTEFQOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNMX01FTV9DT1BZX09WRVJMQVBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lN
QUdFX0ZPUk1BVF9NSVNNQVRDSDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTUFHRV9G
T1JNQVRfTUlTTUFUQ0hcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lNQUdFX0ZP
Uk1BVF9OT1RfU1VQUE9SVEVEOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lNQUdFX0ZP
Uk1BVF9OT1RfU1VQUE9SVEVEXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9CVUlM
RF9QUk9HUkFNX0ZBSUxVUkU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfQlVJTERfUFJP
R1JBTV9GQUlMVVJFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9NQVBfRkFJTFVS
RToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9NQVBfRkFJTFVSRVxuIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9WQUxVRToKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDTF9JTlZBTElEX1ZBTFVFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9J
TlZBTElEX0RFVklDRV9UWVBFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURf
REVWSUNFX1RZUEVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfUExB
VEZPUk06CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9QTEFURk9STVxuIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9ERVZJQ0U6CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9ERVZJQ0VcbiIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENMX0lOVkFMSURfQ09OVEVYVDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9J
TlZBTElEX0NPTlRFWFRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURf
UVVFVUVfUFJPUEVSVElFUzoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1FV
RVVFX1BST1BFUlRJRVNcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURf
Q09NTUFORF9RVUVVRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0NPTU1B
TkRfUVVFVUVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfSE9TVF9Q
VFI6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9IT1NUX1BUUlxuIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9NRU1fT0JKRUNUOgorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfTUVNX09CSkVDVFxuIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ0xfSU5WQUxJRF9JTUFHRV9GT1JNQVRfREVTQ1JJUFRPUjoKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0lNQUdFX0ZPUk1BVF9ERVNDUklQVE9SXG4iKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0lNQUdFX1NJWkU6CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9JTUFHRV9TSVpFXG4iKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1NBTVBMRVI6CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ0xfSU5WQUxJRF9TQU1QTEVSXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9J
TlZBTElEX0JJTkFSWToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0JJTkFS
WVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9CVUlMRF9PUFRJT05T
OgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQlVJTERfT1BUSU9OU1xuIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9QUk9HUkFNOgorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfUFJPR1JBTVxuIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ0xfSU5WQUxJRF9QUk9HUkFNX0VYRUNVVEFCTEU6CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ0xfSU5WQUxJRF9QUk9HUkFNX0VYRUNVVEFCTEVcbiIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENMX0lOVkFMSURfS0VSTkVMX05BTUU6CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ0xfSU5WQUxJRF9LRVJORUxfTkFNRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0xfSU5WQUxJRF9LRVJORUxfREVGSU5JVElPTjoKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDTF9JTlZBTElEX0tFUk5FTF9ERUZJTklUSU9OXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDTF9JTlZBTElEX0tFUk5FTDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZB
TElEX0tFUk5FTFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9BUkdf
SU5ERVg6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9BUkdfSU5ERVhcbiIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfQVJHX1ZBTFVFOgorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfQVJHX1ZBTFVFXG4iKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0FSR19TSVpFOgorICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNMX0lOVkFMSURfQVJHX1NJWkVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENM
X0lOVkFMSURfS0VSTkVMX0FSR1M6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJ
RF9LRVJORUxfQVJHU1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9X
T1JLX0RJTUVOU0lPTjoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1dPUktf
RElNRU5TSU9OXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1dPUktf
R1JPVVBfU0laRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1dPUktfR1JP
VVBfU0laRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9XT1JLX0lU
RU1fU0laRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1dPUktfSVRFTV9T
SVpFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0dMT0JBTF9PRkZT
RVQ6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9HTE9CQUxfT0ZGU0VUXG4i
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0VWRU5UX1dBSVRfTElTVDoK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0VWRU5UX1dBSVRfTElTVFxuIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9FVkVOVDoKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0VWRU5UXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDTF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9J
TlZBTElEX09QRVJBVElPTlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJ
RF9HTF9PQkpFQ1Q6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9HTF9PQkpF
Q1RcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfQlVGRkVSX1NJWkU6
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9CVUZGRVJfU0laRVxuIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9NSVBfTEVWRUw6CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9NSVBfTEVWRUxcbiIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENMX0lOVkFMSURfR0xPQkFMX1dPUktfU0laRToKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDTF9JTlZBTElEX0dMT0JBTF9XT1JLX1NJWkVcbiIpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZXJyb3IgY29k
ZSA6ICVkXG4iLCBlcnJvcik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjYmIyMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09w
ZW5DTENvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIE9wZW5DTENvbnRleHRfaAor
I2RlZmluZSBPcGVuQ0xDb250ZXh0X2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJM
RShPUEVOQ0wpCisKKyNpbmNsdWRlICJDTC9jbC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQ29udGV4dE9wZW5D
TAoreworcHVibGljOgorICAgIC8vIFJldHVybnMgTlVMTCBpZiBpbml0aWFsaXphdGlvbiBmYWls
ZWQuCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQoKTsKKworICAgIGNs
X2NvbnRleHQgZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dDsgfQorICAg
IGNsX2NvbW1hbmRfcXVldWUgY29tbWFuZFF1ZXVlKCkgeyByZXR1cm4gbV9jb21tYW5kUXVldWU7
IH0KKworCisgICAgaW5saW5lIHZvaWQgY29tcGlsZUZFQ29tcG9zaXRlKCk7CisgICAgaW5saW5l
IHZvaWQgY29tcGlsZUZFRmxvb2QoKTsKKyAgICBpbmxpbmUgdm9pZCBjb21waWxlRkVPZmZzZXQo
KTsKKyAgICBpbmxpbmUgdm9pZCBjb21waWxlRkVCbGVuZCgpOworICAgIGlubGluZSB2b2lkIGNv
bXBpbGVGRUdhdXNzaWFuQmx1cigpOworCisgICAgaW5saW5lIHZvaWQgYXBwbHlGRUNvbXBvc2l0
ZShjbF9tZW0sIEludFNpemUsIGNsX21lbSwgY2xfbWVtLCBGbG9hdFBvaW50LCBGbG9hdFBvaW50
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgaW50KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBs
eUZFRmxvb2QoY2xfbWVtLCBJbnRTaXplLCBDb2xvcik7CisgICAgaW5saW5lIHZvaWQgYXBwbHlG
RU9mZnNldChjbF9tZW0sIEludFNpemUsIGNsX21lbSwgRmxvYXRQb2ludCk7CisgICAgaW5saW5l
IHZvaWQgYXBwbHlGRUJsZW5kKGNsX21lbSwgSW50U2l6ZSwgY2xfbWVtLCBjbF9tZW0sIGludCk7
CisgICAgaW5saW5lIHZvaWQgYXBwbHlGRUdhdXNzaWFuQmx1cihjbF9tZW0sIEludFNpemUsIGNs
X21lbSk7CisKKyAgICBzdGF0aWMgdm9pZCBPcGVuQ0xQcmludEVycm9yKGNsX2ludCBlcnJvcik7
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNsX3Byb2dyYW0gY29tcGlsZVByb2dyYW0oY29uc3Qg
Y2hhciopOworICAgIHN0YXRpYyBpbmxpbmUgY2xfa2VybmVsIGtlcm5lbEJ5TmFtZShjbF9wcm9n
cmFtIHByb2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpIHsgcmV0dXJuIGNsQ3JlYXRlS2VybmVsKHBy
b2dyYW0sIG5hbWUsIE5VTEwpOyB9CisKKyAgICBjbF9jb21tYW5kX3F1ZXVlIG1fY29tbWFuZFF1
ZXVlOworICAgIGNsX2RldmljZV9pZCBtX2RldmljZTsKKyAgICBjbF9jb250ZXh0IG1fZGV2aWNl
Q29udGV4dDsKKworICAgIGNsX3Byb2dyYW0gbV9mZU9mZnNldFByb2dyYW07CisgICAgY2xfa2Vy
bmVsIG1fZmVPZmZzZXQ7CisKKyAgICBjbF9wcm9ncmFtIG1fZmVCbGVuZFByb2dyYW07CisgICAg
Y2xfa2VybmVsIG1fZmVOb3JtYWxCbGVuZDsKKyAgICBjbF9rZXJuZWwgbV9mZU11bHRpcGx5Qmxl
bmQ7CisgICAgY2xfa2VybmVsIG1fZmVTY3JlZW5CbGVuZDsKKyAgICBjbF9rZXJuZWwgbV9mZURh
cmtlbkJsZW5kOworICAgIGNsX2tlcm5lbCBtX2ZlTGlnaHRlbkJsZW5kOworICAgIGNsX2tlcm5l
bCBtX2ZlVW5rbm93QmxlbmQ7CisKKyAgICBjbF9wcm9ncmFtIG1fZmVHYXVzc2lhbkJsdXJQcm9n
cmFtOworICAgIGNsX2tlcm5lbCBtX2ZlR2F1c3NpYW5CbHVyOworCisgICAgY2xfcHJvZ3JhbSBt
X0ZFRmxvb2RQcm9ncmFtOworICAgIGNsX2tlcm5lbCBtX0ZFRmxvb2Q7CisKKyAgICBjbF9wcm9n
cmFtIG1fZmVDb21wb3NpdGVQcm9ncmFtOworICAgIGNsX2tlcm5lbCBtX2ZlQXJpdGhtZXRpYzsK
KyAgICBjbF9rZXJuZWwgbV9mZUF0b3A7CisgICAgY2xfa2VybmVsIG1fZmVJbjsKKyAgICBjbF9r
ZXJuZWwgbV9mZU91dDsKKyAgICBjbF9rZXJuZWwgbV9mZU92ZXI7CisgICAgY2xfa2VybmVsIG1f
ZmVYb3I7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShPUEVOQ0wpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUJsZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGJiMDExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNM
RkVCbGVuZC5jcHAKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
VGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRUJsZW5k
LmgiCisjaW5jbHVkZSAiT3BlbkNMQ29udGV4dC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKwor
I2RlZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dS
QU1fU1RSKFNyYykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciog
RkVCbGVuZEtlcm5lbFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCisgICAgY29uc3Qgc2FtcGxlcl90
IHNhbXBsZXIgPSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfCBDTEtfQUREUkVTU19DTEFN
UCB8IENMS19GSUxURVJfTkVBUkVTVDsKKworICAgIF9fa2VybmVsIHZvaWQgTm9ybWFsQmxlbmQo
X193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90
IHNvdXJjZUEsICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQikKKyAgICAgICAgeworICAg
ICAgICAgICAgaW50MiBzb3VyY2VDb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0
X2dsb2JhbF9pZCgxKSk7CisgICAgICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9p
bWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmQpOworICAgICAgICAgICAgZmxvYXQ0
IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3Jk
KTsKKyAgICAgICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVsID0gKGZsb2F0NCkoKDEuMCAt
IHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi54ICsgc291cmNlUGl4ZWxBLngsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLjAgLSBzb3VyY2VQ
aXhlbEEudykgKiBzb3VyY2VQaXhlbEIueSArIHNvdXJjZVBpeGVsQS55LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4wIC0gc291cmNlUGl4ZWxBLncp
ICogc291cmNlUGl4ZWxCLnogKyBzb3VyY2VQaXhlbEEueiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCAtICgxLjAgLSBzb3VyY2VQaXhlbEEudykg
KiAoMS4wIC0gc291cmNlUGl4ZWxCLncpKTsKKyAgICAgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0
aW5hdGlvbiwgc291cmNlQ29vcmQsIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgICAgICB9CisKKyAg
ICBfX2tlcm5lbCB2b2lkIE11bHRpcGx5QmxlbmQoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0
aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUEsICBfX3JlYWRfb25seSBpbWFn
ZTJkX3Qgc291cmNlQikKKyAgICAgICAgeworICAgICAgICAgICAgaW50MiBzb3VyY2VDb29yZCA9
IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSk7CisgICAgICAgICAg
ICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291
cmNlQ29vcmQpOworICAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2Vm
KHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKKyAgICAgICAgICAgIGZsb2F0NCBkZXN0
aW5hdGlvblBpeGVsID0gKGZsb2F0NCkoKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBp
eGVsQi54ICsgKDEuMCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS54ICsgc291cmNl
UGl4ZWxBLnggKiBzb3VyY2VQaXhlbEIueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi55
ICsgKDEuMCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS55ICsgc291cmNlUGl4ZWxB
LnkgKiBzb3VyY2VQaXhlbEIueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi56ICsgKDEu
MCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS56ICsgc291cmNlUGl4ZWxBLnogKiBz
b3VyY2VQaXhlbEIueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuMCAtICgxLjAgLSBzb3VyY2VQaXhlbEEudykgKiAoMS4wIC0gc291cmNlUGl4ZWxC
LncpKTsKKyAgICAgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291cmNlQ29vcmQs
IGRlc3RpbmF0aW9uUGl4ZWwpOworICAgICAgICB9CisKKyAgICBfX2tlcm5lbCB2b2lkIFNjcmVl
bkJsZW5kKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fcmVhZF9vbmx5IGlt
YWdlMmRfdCBzb3VyY2VBLCAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludDIgc291cmNlQ29vcmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQo
MCksIGdldF9nbG9iYWxfaWQoMSkpOworICAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9
IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKKyAgICAgICAgICAg
IGZsb2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3Vy
Y2VDb29yZCk7CisgICAgICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQp
KHNvdXJjZVBpeGVsQi54ICsgc291cmNlUGl4ZWxBLnggLSBzb3VyY2VQaXhlbEEueCAqIHNvdXJj
ZVBpeGVsQi54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbEIueSArIHNvdXJjZVBpeGVsQS55IC0gc291cmNlUGl4ZWxBLnkgKiBzb3Vy
Y2VQaXhlbEIueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlUGl4ZWxCLnogKyBzb3VyY2VQaXhlbEEueiAtIHNvdXJjZVBpeGVsQS56ICogc291
cmNlUGl4ZWxCLnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEuMCAtICgxLjAgLSBzb3VyY2VQaXhlbEEudykgKiAoMS4wIC0gc291cmNlUGl4ZWxCLncp
KTsKKyAgICAgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291cmNlQ29vcmQsIGRl
c3RpbmF0aW9uUGl4ZWwpOworICAgICAgICB9CisKKyAgICBfX2tlcm5lbCB2b2lkIERhcmtlbkJs
ZW5kKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fcmVhZF9vbmx5IGltYWdl
MmRfdCBzb3VyY2VBLCAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGludDIgc291cmNlQ29vcmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCks
IGdldF9nbG9iYWxfaWQoMSkpOworICAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJl
YWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKKyAgICAgICAgICAgIGZs
b2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VD
b29yZCk7CisgICAgICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKG1p
bigoMS4wIC0gc291cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnggKyBzb3VyY2VQaXhlbEEu
eCwgKDEuMCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS54ICsgc291cmNlUGl4ZWxC
LngpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4o
KDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi55ICsgc291cmNlUGl4ZWxBLnks
ICgxLjAgLSBzb3VyY2VQaXhlbEIudykgKiBzb3VyY2VQaXhlbEEueSArIHNvdXJjZVBpeGVsQi55
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluKCgx
LjAgLSBzb3VyY2VQaXhlbEEudykgKiBzb3VyY2VQaXhlbEIueiArIHNvdXJjZVBpeGVsQS56LCAo
MS4wIC0gc291cmNlUGl4ZWxCLncpICogc291cmNlUGl4ZWxBLnogKyBzb3VyY2VQaXhlbEIueiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4w
IC0gKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqICgxLjAgLSBzb3VyY2VQaXhlbEIudykpOworICAg
ICAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBzb3VyY2VDb29yZCwgZGVzdGluYXRp
b25QaXhlbCk7CisgICAgICAgIH0KKworICAgIF9fa2VybmVsIHZvaWQgTGlnaHRlbkJsZW5kKF9f
d3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBz
b3VyY2VBLCAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludDIgc291cmNlQ29vcmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9n
bG9iYWxfaWQoMSkpOworICAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1h
Z2VmKHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKKyAgICAgICAgICAgIGZsb2F0NCBz
b3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7
CisgICAgICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKG1heCgoMS4w
IC0gc291cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnggKyBzb3VyY2VQaXhlbEEueCwgKDEu
MCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS54ICsgc291cmNlUGl4ZWxCLngpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoKDEuMCAt
IHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi55ICsgc291cmNlUGl4ZWxBLnksICgxLjAg
LSBzb3VyY2VQaXhlbEIudykgKiBzb3VyY2VQaXhlbEEueSArIHNvdXJjZVBpeGVsQi55KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KCgxLjAgLSBz
b3VyY2VQaXhlbEEudykgKiBzb3VyY2VQaXhlbEIueiArIHNvdXJjZVBpeGVsQS56LCAoMS4wIC0g
c291cmNlUGl4ZWxCLncpICogc291cmNlUGl4ZWxBLnogKyBzb3VyY2VQaXhlbEIueiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wIC0gKDEu
MCAtIHNvdXJjZVBpeGVsQS53KSAqICgxLjAgLSBzb3VyY2VQaXhlbEIudykpOworICAgICAgICAg
ICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBzb3VyY2VDb29yZCwgZGVzdGluYXRpb25QaXhl
bCk7CisgICAgICAgIH0KKworICAgIF9fa2VybmVsIHZvaWQgVW5rbm93QmxlbmQoX193cml0ZV9v
bmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUEs
ICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQikKKyAgICAgICAgeworICAgICAgICAgICAg
aW50MiBzb3VyY2VDb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9p
ZCgxKSk7CisgICAgICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKDAu
MCwwLjAsMC4wLDAuMCk7CisgICAgICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIHNv
dXJjZUNvb3JkLCBkZXN0aW5hdGlvblBpeGVsKTsKKyAgICAgICAgfQorKTsKKworaW5saW5lIHZv
aWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFQmxlbmQoKQoreworICAgIGlmICghbV9m
ZU5vcm1hbEJsZW5kKSB7CisgICAgICAgIG1fZmVCbGVuZFByb2dyYW0gPSBjb21waWxlUHJvZ3Jh
bShGRUJsZW5kS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX2ZlQmxlbmRQcm9ncmFt
KTsKKworICAgICAgICBtX2ZlTm9ybWFsQmxlbmQgPSBrZXJuZWxCeU5hbWUobV9mZUJsZW5kUHJv
Z3JhbSwgIk5vcm1hbEJsZW5kIik7CisgICAgICAgIEFTU0VSVChtX2ZlTm9ybWFsQmxlbmQpOwor
ICAgICAgICBtX2ZlTXVsdGlwbHlCbGVuZCA9IGtlcm5lbEJ5TmFtZShtX2ZlQmxlbmRQcm9ncmFt
LCAiTXVsdGlwbHlCbGVuZCIpOworICAgICAgICBBU1NFUlQobV9mZU5vcm1hbEJsZW5kKTsKKyAg
ICAgICAgbV9mZVNjcmVlbkJsZW5kID0ga2VybmVsQnlOYW1lKG1fZmVCbGVuZFByb2dyYW0sICJT
Y3JlZW5CbGVuZCIpOworICAgICAgICBBU1NFUlQobV9mZU5vcm1hbEJsZW5kKTsKKyAgICAgICAg
bV9mZURhcmtlbkJsZW5kID0ga2VybmVsQnlOYW1lKG1fZmVCbGVuZFByb2dyYW0sICJEYXJrZW5C
bGVuZCIpOworICAgICAgICBBU1NFUlQobV9mZU5vcm1hbEJsZW5kKTsKKyAgICAgICAgbV9mZUxp
Z2h0ZW5CbGVuZCA9IGtlcm5lbEJ5TmFtZShtX2ZlQmxlbmRQcm9ncmFtLCAiTGlnaHRlbkJsZW5k
Iik7CisgICAgICAgIEFTU0VSVChtX2ZlTm9ybWFsQmxlbmQpOworICAgICAgICBtX2ZlVW5rbm93
QmxlbmQgPSBrZXJuZWxCeU5hbWUobV9mZUJsZW5kUHJvZ3JhbSwgIlVua25vd0JsZW5kIik7Cisg
ICAgICAgIEFTU0VSVChtX2ZlTm9ybWFsQmxlbmQpOworICAgIH0KK30KKworaW5saW5lIHZvaWQg
RmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRUJsZW5kKGNsX21lbSBkZXN0aW5hdGlvbiwgSW50
U2l6ZSBkZXN0aW5hdGlvblNpemUsIGNsX21lbSBzb3VyY2VBLCBjbF9tZW0gc291cmNlQiwgaW50
IG1vZGUpCit7CisgICAgc2l6ZV90IGdsb2JhbFNpemVbMl0gPSAgeyBkZXN0aW5hdGlvblNpemUu
d2lkdGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpIH07CisgICAgY2xfa2VybmVsIGJsZW5k
TW9kZTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgRkVCTEVORF9NT0RFX05PUk1B
TDoKKyAgICAgICAgYmxlbmRNb2RlID0gbV9mZU5vcm1hbEJsZW5kOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFQkxFTkRfTU9ERV9NVUxUSVBMWToKKyAgICAgICAgYmxlbmRNb2RlID0gbV9m
ZU11bHRpcGx5QmxlbmQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVCTEVORF9NT0RFX1ND
UkVFTjoKKyAgICAgICAgYmxlbmRNb2RlID0gbV9mZVNjcmVlbkJsZW5kOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZFQkxFTkRfTU9ERV9EQVJLRU46CisgICAgICAgIGJsZW5kTW9kZSA9IG1f
ZmVEYXJrZW5CbGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfTElH
SFRFTjoKKyAgICAgICAgYmxlbmRNb2RlID0gbV9mZUxpZ2h0ZW5CbGVuZDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfVU5LTk9XTjoKKyAgICBkZWZhdWx0OgorICAgICAg
ICBibGVuZE1vZGUgPSBtX2ZlVW5rbm93QmxlbmQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNsU2V0S2VybmVsQXJnKGJsZW5kTW9kZSwgMCwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikg
JmRlc3RpbmF0aW9uKTsKKyAgICBjbFNldEtlcm5lbEFyZyhibGVuZE1vZGUsIDEsIHNpemVvZihj
bF9tZW0pLCAodm9pZCopICZzb3VyY2VBKTsKKyAgICBjbFNldEtlcm5lbEFyZyhibGVuZE1vZGUs
IDIsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZzb3VyY2VCKTsKKworICAgIGNsRmluaXNoKG1f
Y29tbWFuZFF1ZXVlKTsKKyAgICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29tbWFuZFF1ZXVl
LCBibGVuZE1vZGUsIDIsIDAsIGdsb2JhbFNpemUsIDAsIDAsIDAsIDApOworfQorCitib29sIEZF
QmxlbmQ6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wq
IGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNsb2NrX3Qgc3RhcnQgPSBjbG9j
aygpOworICAgIGNvbnRleHQtPmNvbXBpbGVGRUJsZW5kKCk7CisgICAgcHJpbnRmKCJCbGVuZCBj
b21waWxlIHRpbWU6ICVsZFxuIiwgKGNsb2NrKCktc3RhcnQpLyovIChkb3VibGUpIENMT0NLU19Q
RVJfU0VDKi8pOworCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisKKyAgICBjbF9tZW0gc291cmNl
QSA9IGluLT5hc09wZW5DTEltYWdlKCk7CisgICAgY2xfbWVtIHNvdXJjZUIgPSBpbjItPmFzT3Bl
bkNMSW1hZ2UoKTsKKyAgICBjbF9tZW0gZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJl
c3VsdCgpOworCisgICAgY29udGV4dC0+YXBwbHlGRUJsZW5kKGRlc3RpbmF0aW9uLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlQSwgc291cmNlQiwgbV9tb2RlKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFQ29tcG9zaXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZF
Q29tcG9zaXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTdiODJm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9PcGVuQ0wvT3BlbkNMRkVDb21wb3NpdGUuY3BwCkBAIC0wLDAgKzEsMzI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVO
Q0wpCisjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKKyNpbmNsdWRlICJPcGVuQ0xDb250ZXh0Lmgi
CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIFBST0dSQU1fU1RSKFNyYykgI1NyYwor
I2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIoU3JjKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBGRUNvbXBvc2l0ZUtlcm5lbFByb2dyYW0gPQorUFJP
R1JBTV9TVFIoCisgICAgY29uc3Qgc2FtcGxlcl90IHNhbXBsZXIgPSBDTEtfTk9STUFMSVpFRF9D
T09SRFNfRkFMU0UgfCBDTEtfQUREUkVTU19DTEFNUCB8IENMS19GSUxURVJfTkVBUkVTVDsKKwor
ICAgIF9fa2VybmVsIHZvaWQgQXJpdGhtZXRpYyhfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3Rp
bmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBz
b3VyY2VBLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBz
b3VyY2VCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhBLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHlBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhC
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlCLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGsxLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGsyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGszLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGs0KQorICAgIHsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50MikgKGdl
dF9nbG9iYWxfaWQoMCkgKyB4QSwgZ2V0X2dsb2JhbF9pZCgxKSArIHlBKTsKKyAgICAgICAgaW50
MiBzb3VyY2VDb29yZEIgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QiwgZ2V0X2dsb2Jh
bF9pZCgxKSArIHlCKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2Vm
KHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQSk7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQ
aXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VDb29yZEIpOworICAg
ICAgICBzb3VyY2VQaXhlbEEueHl6ICo9IHNvdXJjZVBpeGVsQS53OworICAgICAgICBzb3VyY2VQ
aXhlbEIueHl6ICo9IHNvdXJjZVBpeGVsQi53OworCisgICAgICAgIGZsb2F0NCBkZXN0aW5hdGlv
blBpeGVsID0gKGZsb2F0NCkoazEgKiBzb3VyY2VQaXhlbEEueCAqIHNvdXJjZVBpeGVsQi54ICsg
azIgKiBzb3VyY2VQaXhlbEEueCArIGszICogc291cmNlUGl4ZWxCLnggKyBrNCAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazEgKiBzb3VyY2VQaXhlbEEueSAq
IHNvdXJjZVBpeGVsQi55ICsgazIgKiBzb3VyY2VQaXhlbEEueSArIGszICogc291cmNlUGl4ZWxC
LnkgKyBrNCAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazEg
KiBzb3VyY2VQaXhlbEEueiAqIHNvdXJjZVBpeGVsQi56ICsgazIgKiBzb3VyY2VQaXhlbEEueiAr
IGszICogc291cmNlUGl4ZWxCLnogKyBrNCAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgazEgKiBzb3VyY2VQaXhlbEEudyAqIHNvdXJjZVBpeGVsQi53ICsgazIg
KiBzb3VyY2VQaXhlbEEudyArIGszICogc291cmNlUGl4ZWxCLncgKyBrNCk7CisKKyAgICAgICAg
ZGVzdGluYXRpb25QaXhlbC53ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC53LCAwLjAsIDEuMCk7
CisgICAgICAgIGZsb2F0IHJlYyA9IDEgLyBkZXN0aW5hdGlvblBpeGVsLnc7CisgICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWwueCA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueCwgMC4wLCAxLjApICog
cmVjOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnkgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVs
LnksIDAuMCwgMS4wKSAqIHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC56ID0gY2xhbXAo
ZGVzdGluYXRpb25QaXhlbC56LCAwLjAsIDEuMCkgKiByZWM7CisKKyAgICAgICAgd3JpdGVfaW1h
Z2VmKGRlc3RpbmF0aW9uLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQo
MSkpLCBkZXN0aW5hdGlvblBpeGVsKTsKKyAgICB9CisKKyAgICBfX2tlcm5lbCB2b2lkIE92ZXIo
X193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCB4QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5QSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCB5QikKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmRBID0gKGludDIpIChnZXRf
Z2xvYmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkgKyB5QSk7CisgICAgICAgIGludDIg
c291cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEIsIGdldF9nbG9iYWxf
aWQoMSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEEgPSByZWFkX2ltYWdlZihz
b3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAgICAgICBmbG9hdDQgc291cmNlUGl4
ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29vcmRCKTsKKyAgICAg
ICAgc291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEudzsKKyAgICAgICAgc291cmNlUGl4
ZWxCLnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25Q
aXhlbCA9IChmbG9hdDQpKHNvdXJjZVBpeGVsQS54ICsgc291cmNlUGl4ZWxCLnggKiAoMSAtIHNv
dXJjZVBpeGVsQS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbEEueSArIHNvdXJjZVBpeGVsQi55ICogKDEgLSBzb3VyY2VQaXhlbEEudyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxB
LnogKyBzb3VyY2VQaXhlbEIueiAqICgxIC0gc291cmNlUGl4ZWxBLncpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS53ICsgc291cmNlUGl4
ZWxCLncgKiAoMSAtIHNvdXJjZVBpeGVsQS53KSk7CisKKyAgICAgICAgZGVzdGluYXRpb25QaXhl
bC53ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC53LCAwLjAsIDEuMCk7CisgICAgICAgIGZsb2F0
IHJlYyA9IDEgLyBkZXN0aW5hdGlvblBpeGVsLnc7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwu
eCA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueCwgMC4wLCAxLjApICogcmVjOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsLnkgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnksIDAuMCwgMS4wKSAq
IHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC56ID0gY2xhbXAoZGVzdGluYXRpb25QaXhl
bC56LCAwLjAsIDEuMCkgKiByZWM7CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9u
LCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBkZXN0aW5hdGlv
blBpeGVsKTsKKyAgICB9CisKKyAgICBfX2tlcm5lbCB2b2lkIEluKF9fd3JpdGVfb25seSBpbWFn
ZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkg
aW1hZ2UyZF90IHNvdXJjZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkg
aW1hZ2UyZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUIpCisgICAgewor
ICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhB
LCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEpOworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQiA9IChp
bnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhCLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUIpOworICAg
ICAgICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwg
c291cmNlQ29vcmRBKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2Vm
KHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQik7CisgICAgICAgIHNvdXJjZVBpeGVsQS54
eXogKj0gc291cmNlUGl4ZWxBLnc7CisgICAgICAgIHNvdXJjZVBpeGVsQi54eXogKj0gc291cmNl
UGl4ZWxCLnc7CisKKyAgICAgICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxvYXQ0KShz
b3VyY2VQaXhlbEEueCAqIHNvdXJjZVBpeGVsQi53LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS55ICogc291cmNlUGl4ZWxCLncsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxBLnogKiBz
b3VyY2VQaXhlbEIudywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbEEudyAqIHNvdXJjZVBpeGVsQi53KTsKKworICAgICAgICBkZXN0aW5hdGlv
blBpeGVsLncgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLncsIDAuMCwgMS4wKTsKKyAgICAgICAg
ZmxvYXQgcmVjID0gMSAvIGRlc3RpbmF0aW9uUGl4ZWwudzsKKyAgICAgICAgZGVzdGluYXRpb25Q
aXhlbC54ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC54LCAwLjAsIDEuMCkgKiByZWM7CisgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWwueSA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueSwgMC4wLCAx
LjApICogcmVjOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnogPSBjbGFtcChkZXN0aW5hdGlv
blBpeGVsLnosIDAuMCwgMS4wKSAqIHJlYzsKKworICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGlu
YXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3Rp
bmF0aW9uUGl4ZWwpOworICAgIH0KKworICAgIF9fa2VybmVsIHZvaWQgT3V0KF9fd3JpdGVfb25s
eSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFk
X29ubHkgaW1hZ2UyZF90IHNvdXJjZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFk
X29ubHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
eEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUIpCisg
ICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgw
KSArIHhBLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEpOworICAgICAgICBpbnQyIHNvdXJjZUNvb3Jk
QiA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhCLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUIp
OworICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2Ft
cGxlciwgc291cmNlQ29vcmRBKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRf
aW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQik7CisgICAgICAgIHNvdXJjZVBp
eGVsQS54eXogKj0gc291cmNlUGl4ZWxBLnc7CisgICAgICAgIHNvdXJjZVBpeGVsQi54eXogKj0g
c291cmNlUGl4ZWxCLnc7CisKKyAgICAgICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxv
YXQ0KShzb3VyY2VQaXhlbEEueCAqICgxIC0gc291cmNlUGl4ZWxCLncpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS55ICogKDEgLSBzb3Vy
Y2VQaXhlbEIudyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlUGl4ZWxBLnogKiAoMSAtIHNvdXJjZVBpeGVsQi53KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQaXhlbEEudyAqICgxIC0gc291cmNlUGl4
ZWxCLncpKTsKKworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLncgPSBjbGFtcChkZXN0aW5hdGlv
blBpeGVsLncsIDAuMCwgMS4wKTsKKyAgICAgICAgZmxvYXQgcmVjID0gMSAvIGRlc3RpbmF0aW9u
UGl4ZWwudzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC54ID0gY2xhbXAoZGVzdGluYXRpb25Q
aXhlbC54LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueSA9IGNs
YW1wKGRlc3RpbmF0aW9uUGl4ZWwueSwgMC4wLCAxLjApICogcmVjOworICAgICAgICBkZXN0aW5h
dGlvblBpeGVsLnogPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnosIDAuMCwgMS4wKSAqIHJlYzsK
KworICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9p
ZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgIH0KKworICAg
IF9fa2VybmVsIHZvaWQgQXRvcChfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VCLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhBLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHlBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhCLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHlCKQorICAgIHsKKyAgICAgICAgaW50MiBzb3VyY2VD
b29yZEEgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QSwgZ2V0X2dsb2JhbF9pZCgxKSAr
IHlBKTsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZEIgPSAoaW50MikgKGdldF9nbG9iYWxfaWQo
MCkgKyB4QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlCKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBp
eGVsQSA9IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQSk7CisgICAg
ICAgIGZsb2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBz
b3VyY2VDb29yZEIpOworICAgICAgICBzb3VyY2VQaXhlbEEueHl6ICo9IHNvdXJjZVBpeGVsQS53
OworICAgICAgICBzb3VyY2VQaXhlbEIueHl6ICo9IHNvdXJjZVBpeGVsQi53OworCisgICAgICAg
IGZsb2F0NCBkZXN0aW5hdGlvblBpeGVsID0gKGZsb2F0NCkoc291cmNlUGl4ZWxBLnggKiBzb3Vy
Y2VQaXhlbEIudyArIHNvdXJjZVBpeGVsQi54ICogKDEgLSBzb3VyY2VQaXhlbEEudyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxBLnkgKiBz
b3VyY2VQaXhlbEIudyArIHNvdXJjZVBpeGVsQi55ICogKDEgLSBzb3VyY2VQaXhlbEEudyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxBLnog
KiBzb3VyY2VQaXhlbEIudyArIHNvdXJjZVBpeGVsQi56ICogKDEgLSBzb3VyY2VQaXhlbEEudyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxB
LncgKiBzb3VyY2VQaXhlbEIudyArIHNvdXJjZVBpeGVsQi53ICogKDEgLSBzb3VyY2VQaXhlbEEu
dykpOworCisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwudyA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4
ZWwudywgMC4wLCAxLjApOworICAgICAgICBmbG9hdCByZWMgPSAxIC8gZGVzdGluYXRpb25QaXhl
bC53OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnggPSBjbGFtcChkZXN0aW5hdGlvblBpeGVs
LngsIDAuMCwgMS4wKSAqIHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC55ID0gY2xhbXAo
ZGVzdGluYXRpb25QaXhlbC55LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWwueiA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueiwgMC4wLCAxLjApICogcmVjOworCisg
ICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDAp
LCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7CisgICAgfQorCisgICAgX19r
ZXJuZWwgdm9pZCBYb3IoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCB5QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB5QikKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmRB
ID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkgKyB5QSk7
CisgICAgICAgIGludDIgc291cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsg
eEIsIGdldF9nbG9iYWxfaWQoMSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEEg
PSByZWFkX2ltYWdlZihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAgICAgICBm
bG9hdDQgc291cmNlUGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNl
Q29vcmRCKTsKKyAgICAgICAgc291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEudzsKKyAg
ICAgICAgc291cmNlUGl4ZWxCLnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAgICBmbG9h
dDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKHNvdXJjZVBpeGVsQS54ICogKDEgLSBzb3Vy
Y2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIueCAqICgxIC0gc291cmNlUGl4ZWxBLncpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS55ICog
KDEgLSBzb3VyY2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIueSAqICgxIC0gc291cmNlUGl4ZWxB
LncpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBp
eGVsQS56ICogKDEgLSBzb3VyY2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIueiAqICgxIC0gc291
cmNlUGl4ZWxBLncpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZVBpeGVsQS53ICogKDEgLSBzb3VyY2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIudyAq
ICgxIC0gc291cmNlUGl4ZWxBLncpKTsKKworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLncgPSBj
bGFtcChkZXN0aW5hdGlvblBpeGVsLncsIDAuMCwgMS4wKTsKKyAgICAgICAgZmxvYXQgcmVjID0g
MSAvIGRlc3RpbmF0aW9uUGl4ZWwudzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC54ID0gY2xh
bXAoZGVzdGluYXRpb25QaXhlbC54LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWwueSA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueSwgMC4wLCAxLjApICogcmVjOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnogPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnosIDAu
MCwgMS4wKSAqIHJlYzsKKworICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQy
KSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwp
OworICAgIH0KKworKTsKKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGls
ZUZFQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAoIW1fZmVDb21wb3NpdGVQcm9ncmFtKSB7CisgICAg
ICAgIG1fZmVDb21wb3NpdGVQcm9ncmFtID0gY29tcGlsZVByb2dyYW0oRkVDb21wb3NpdGVLZXJu
ZWxQcm9ncmFtKTsKKyAgICAgICAgQVNTRVJUKG1fZmVDb21wb3NpdGVQcm9ncmFtKTsKKworICAg
ICAgICBtX2ZlQXJpdGhtZXRpYyA9IGtlcm5lbEJ5TmFtZShtX2ZlQ29tcG9zaXRlUHJvZ3JhbSwg
IkFyaXRobWV0aWMiKTsKKyAgICAgICAgQVNTRVJUKG1fZmVBcml0aG1ldGljKTsKKyAgICAgICAg
bV9mZU92ZXIgPSBrZXJuZWxCeU5hbWUobV9mZUNvbXBvc2l0ZVByb2dyYW0sICJPdmVyIik7Cisg
ICAgICAgIEFTU0VSVChtX2ZlT3Zlcik7CisgICAgICAgIG1fZmVJbiA9IGtlcm5lbEJ5TmFtZSht
X2ZlQ29tcG9zaXRlUHJvZ3JhbSwgIkluIik7CisgICAgICAgIEFTU0VSVChtX2ZlSW4pOworICAg
ICAgICBtX2ZlT3V0ID0ga2VybmVsQnlOYW1lKG1fZmVDb21wb3NpdGVQcm9ncmFtLCAiT3V0Iik7
CisgICAgICAgIEFTU0VSVChtX2ZlT3V0KTsKKyAgICAgICAgbV9mZUF0b3AgPSBrZXJuZWxCeU5h
bWUobV9mZUNvbXBvc2l0ZVByb2dyYW0sICJBdG9wIik7CisgICAgICAgIEFTU0VSVChtX2ZlQXRv
cCk7CisgICAgICAgIG1fZmVYb3IgPSBrZXJuZWxCeU5hbWUobV9mZUNvbXBvc2l0ZVByb2dyYW0s
ICJYb3IiKTsKKyAgICAgICAgQVNTRVJUKG1fZmVYb3IpOworICAgIH0KK30KKworaW5saW5lIHZv
aWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRUNvbXBvc2l0ZShjbF9tZW0gZGVzdGluYXRp
b24sIEludFNpemUgZGVzdGluYXRpb25TaXplLCBjbF9tZW0gc291cmNlQSwgY2xfbWVtIHNvdXJj
ZUIsIEZsb2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEsIEZsb2F0UG9pbnQgcmVsYXRp
dmVTb3VyY2VMb2NhdGlvbkIsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
LCBpbnQgbW9kZSkKK3sKKyAgICBzaXplX3QgZ2xvYmFsU2l6ZVsyXSA9ICB7IGRlc3RpbmF0aW9u
U2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkgfTsKKyAgICBjbF9rZXJuZWwg
Y29tcG9zaXRlTW9kZTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAgY29tcG9zaXRlTW9kZSA9IG1fZmVBcml0
aG1ldGljOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVI6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2ZlT3ZlcjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKKyAgICAgICAgY29tcG9zaXRlTW9kZSA9
IG1fZmVJbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VVQ6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2ZlT3V0OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUg
PSBtX2ZlQXRvcDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9YT1I6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2ZlWG9yOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBjb21wb3NpdGVNb2RlID0gbV9mZU92ZXI7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGZsb2F0IHhBID0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEu
eCgpOworICAgIGZsb2F0IHlBID0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEueSgpOworCisgICAg
ZmxvYXQgeEIgPSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQi54KCk7CisgICAgZmxvYXQgeUIgPSBy
ZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQi55KCk7CisKKyAgICBjbFNldEtlcm5lbEFyZyhjb21wb3Np
dGVNb2RlLCAwLCBzaXplb2YoY2xfbWVtKSwgKHZvaWQqKSAmZGVzdGluYXRpb24pOworICAgIGNs
U2V0S2VybmVsQXJnKGNvbXBvc2l0ZU1vZGUsIDEsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZz
b3VyY2VBKTsKKyAgICBjbFNldEtlcm5lbEFyZyhjb21wb3NpdGVNb2RlLCAyLCBzaXplb2YoY2xf
bWVtKSwgKHZvaWQqKSAmc291cmNlQik7CisgICAgY2xTZXRLZXJuZWxBcmcoY29tcG9zaXRlTW9k
ZSwgMywgc2l6ZW9mKGNsX2Zsb2F0KSwgKHZvaWQqKSAmeEEpOworICAgIGNsU2V0S2VybmVsQXJn
KGNvbXBvc2l0ZU1vZGUsIDQsIHNpemVvZihjbF9mbG9hdCksICh2b2lkKikgJnlBKTsKKyAgICBj
bFNldEtlcm5lbEFyZyhjb21wb3NpdGVNb2RlLCA1LCBzaXplb2YoY2xfZmxvYXQpLCAodm9pZCop
ICZ4Qik7CisgICAgY2xTZXRLZXJuZWxBcmcoY29tcG9zaXRlTW9kZSwgNiwgc2l6ZW9mKGNsX2Zs
b2F0KSwgKHZvaWQqKSAmeUIpOworICAgIGlmIChtb2RlID09IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUMpIHsKKyAgICAgICAgY2xTZXRLZXJuZWxBcmcoY29tcG9zaXRlTW9kZSwgNywg
c2l6ZW9mKGNsX2Zsb2F0KSwgKHZvaWQqKSAmazEpOworICAgICAgICBjbFNldEtlcm5lbEFyZyhj
b21wb3NpdGVNb2RlLCA4LCBzaXplb2YoY2xfZmxvYXQpLCAodm9pZCopICZrMik7CisgICAgICAg
IGNsU2V0S2VybmVsQXJnKGNvbXBvc2l0ZU1vZGUsIDksIHNpemVvZihjbF9mbG9hdCksICh2b2lk
KikgJmszKTsKKyAgICAgICAgY2xTZXRLZXJuZWxBcmcoY29tcG9zaXRlTW9kZSwgMTAsIHNpemVv
ZihjbF9mbG9hdCksICh2b2lkKikgJms0KTsKKyAgICB9CisKKyAgICBjbEZpbmlzaChtX2NvbW1h
bmRRdWV1ZSk7CisgICAgY2xFbnF1ZXVlTkRSYW5nZUtlcm5lbChtX2NvbW1hbmRRdWV1ZSwgY29t
cG9zaXRlTW9kZSwgMiwgMCwgZ2xvYmFsU2l6ZSwgMCwgMCwgMCwgMCk7Cit9CisKK2Jvb2wgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAo
IWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnRleHQtPmNvbXBpbGVG
RUNvbXBvc2l0ZSgpOworCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwor
ICAgIGNsX21lbSBzb3VyY2VBID0gaW4tPmFzT3BlbkNMSW1hZ2UoKTsKKworICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgY2xfbWVtIHNvdXJjZUIgPSBpbjItPmFz
T3BlbkNMSW1hZ2UoKTsKKworICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTElt
YWdlUmVzdWx0KCk7CisKKyAgICBGbG9hdFBvaW50IHJlbGF0aXZlU291cmNlTG9jYXRpb25BKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworICAgIHJlbGF0aXZlU291cmNlTG9j
YXRpb25BLnNldFgoYWJzb2x1dGVQYWludFJlY3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZUxvY2F0
aW9uQS54KCkpOworICAgIHJlbGF0aXZlU291cmNlTG9jYXRpb25BLnNldFkoYWJzb2x1dGVQYWlu
dFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQS55KCkpOworCisgICAgRmxvYXRQ
b2ludCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9j
YXRpb24oKSk7CisgICAgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIuc2V0WChhYnNvbHV0ZVBhaW50
UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlTG9jYXRpb25CLngoKSk7CisgICAgcmVsYXRpdmVT
b3VyY2VMb2NhdGlvbkIuc2V0WShhYnNvbHV0ZVBhaW50UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291
cmNlTG9jYXRpb25CLnkoKSk7CisKKyAgICBjb250ZXh0LT5hcHBseUZFQ29tcG9zaXRlKGRlc3Rp
bmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlQSwgc291cmNlQiwgcmVs
YXRpdmVTb3VyY2VMb2NhdGlvbkEsIHJlbGF0aXZlU291cmNlTG9jYXRpb25CLCBtX2sxLCBtX2sy
LCBtX2szLCBtX2s0LCBtX3R5cGUpOworCisKKyAgICAvL0Zsb2F0UmVjdCBzcmNSZWN0ID0gRmxv
YXRSZWN0KDAsIDAsIC0xLCAtMSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVO
Q0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L09wZW5DTC9PcGVuQ0xGRUNvbXBvc2l0ZS5jcHAuYXV0b3NhdmUgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUNvbXBvc2l0ZS5jcHAuYXV0
b3NhdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3YjgyZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3Bl
bkNML09wZW5DTEZFQ29tcG9zaXRlLmNwcC5hdXRvc2F2ZQpAQCAtMCwwICsxLDMyNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5o
dT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BF
TkNMKQorI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisjaW5jbHVkZSAiT3BlbkNMQ29udGV4dC5o
IgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMK
KyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3QgY2hhciogRkVDb21wb3NpdGVLZXJuZWxQcm9ncmFtID0KK1BS
T0dSQU1fU1RSKAorICAgIGNvbnN0IHNhbXBsZXJfdCBzYW1wbGVyID0gQ0xLX05PUk1BTElaRURf
Q09PUkRTX0ZBTFNFIHwgQ0xLX0FERFJFU1NfQ0xBTVAgfCBDTEtfRklMVEVSX05FQVJFU1Q7CisK
KyAgICBfX2tlcm5lbCB2b2lkIEFyaXRobWV0aWMoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0
aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qg
c291cmNlQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qg
c291cmNlQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB5QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4
QiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5QiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBrMiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBrMywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBrNCkKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmRBID0gKGludDIpIChn
ZXRfZ2xvYmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkgKyB5QSk7CisgICAgICAgIGlu
dDIgc291cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEIsIGdldF9nbG9i
YWxfaWQoMSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEEgPSByZWFkX2ltYWdl
Zihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAgICAgICBmbG9hdDQgc291cmNl
UGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29vcmRCKTsKKyAg
ICAgICAgc291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEudzsKKyAgICAgICAgc291cmNl
UGl4ZWxCLnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAgICBmbG9hdDQgZGVzdGluYXRp
b25QaXhlbCA9IChmbG9hdDQpKGsxICogc291cmNlUGl4ZWxBLnggKiBzb3VyY2VQaXhlbEIueCAr
IGsyICogc291cmNlUGl4ZWxBLnggKyBrMyAqIHNvdXJjZVBpeGVsQi54ICsgazQgLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxICogc291cmNlUGl4ZWxBLnkg
KiBzb3VyY2VQaXhlbEIueSArIGsyICogc291cmNlUGl4ZWxBLnkgKyBrMyAqIHNvdXJjZVBpeGVs
Qi55ICsgazQgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsx
ICogc291cmNlUGl4ZWxBLnogKiBzb3VyY2VQaXhlbEIueiArIGsyICogc291cmNlUGl4ZWxBLnog
KyBrMyAqIHNvdXJjZVBpeGVsQi56ICsgazQgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGsxICogc291cmNlUGl4ZWxBLncgKiBzb3VyY2VQaXhlbEIudyArIGsy
ICogc291cmNlUGl4ZWxBLncgKyBrMyAqIHNvdXJjZVBpeGVsQi53ICsgazQpOworCisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwudyA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwudywgMC4wLCAxLjAp
OworICAgICAgICBmbG9hdCByZWMgPSAxIC8gZGVzdGluYXRpb25QaXhlbC53OworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsLnggPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLngsIDAuMCwgMS4wKSAq
IHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC55ID0gY2xhbXAoZGVzdGluYXRpb25QaXhl
bC55LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueiA9IGNsYW1w
KGRlc3RpbmF0aW9uUGl4ZWwueiwgMC4wLCAxLjApICogcmVjOworCisgICAgICAgIHdyaXRlX2lt
YWdlZihkZXN0aW5hdGlvbiwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lk
KDEpKSwgZGVzdGluYXRpb25QaXhlbCk7CisgICAgfQorCisgICAgX19rZXJuZWwgdm9pZCBPdmVy
KF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgeEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgeUIpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZ2V0
X2dsb2JhbF9pZCgwKSArIHhBLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEpOworICAgICAgICBpbnQy
IHNvdXJjZUNvb3JkQiA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhCLCBnZXRfZ2xvYmFs
X2lkKDEpICsgeUIpOworICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYo
c291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmRBKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBp
eGVsQiA9IHJlYWRfaW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQik7CisgICAg
ICAgIHNvdXJjZVBpeGVsQS54eXogKj0gc291cmNlUGl4ZWxBLnc7CisgICAgICAgIHNvdXJjZVBp
eGVsQi54eXogKj0gc291cmNlUGl4ZWxCLnc7CisKKyAgICAgICAgZmxvYXQ0IGRlc3RpbmF0aW9u
UGl4ZWwgPSAoZmxvYXQ0KShzb3VyY2VQaXhlbEEueCArIHNvdXJjZVBpeGVsQi54ICogKDEgLSBz
b3VyY2VQaXhlbEEudyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlUGl4ZWxBLnkgKyBzb3VyY2VQaXhlbEIueSAqICgxIC0gc291cmNlUGl4ZWxBLncp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVs
QS56ICsgc291cmNlUGl4ZWxCLnogKiAoMSAtIHNvdXJjZVBpeGVsQS53KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQaXhlbEEudyArIHNvdXJjZVBp
eGVsQi53ICogKDEgLSBzb3VyY2VQaXhlbEEudykpOworCisgICAgICAgIGRlc3RpbmF0aW9uUGl4
ZWwudyA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwudywgMC4wLCAxLjApOworICAgICAgICBmbG9h
dCByZWMgPSAxIC8gZGVzdGluYXRpb25QaXhlbC53OworICAgICAgICBkZXN0aW5hdGlvblBpeGVs
LnggPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLngsIDAuMCwgMS4wKSAqIHJlYzsKKyAgICAgICAg
ZGVzdGluYXRpb25QaXhlbC55ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC55LCAwLjAsIDEuMCkg
KiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueiA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4
ZWwueiwgMC4wLCAxLjApICogcmVjOworCisgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlv
biwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRp
b25QaXhlbCk7CisgICAgfQorCisgICAgX19rZXJuZWwgdm9pZCBJbihfX3dyaXRlX29ubHkgaW1h
Z2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5
IGltYWdlMmRfdCBzb3VyY2VBLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5
IGltYWdlMmRfdCBzb3VyY2VCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhBLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlBLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHhCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlCKQorICAgIHsK
KyAgICAgICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4
QSwgZ2V0X2dsb2JhbF9pZCgxKSArIHlBKTsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZEIgPSAo
aW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlCKTsKKyAg
ICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBsZXIs
IHNvdXJjZUNvb3JkQSk7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdl
Zihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VDb29yZEIpOworICAgICAgICBzb3VyY2VQaXhlbEEu
eHl6ICo9IHNvdXJjZVBpeGVsQS53OworICAgICAgICBzb3VyY2VQaXhlbEIueHl6ICo9IHNvdXJj
ZVBpeGVsQi53OworCisgICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVsID0gKGZsb2F0NCko
c291cmNlUGl4ZWxBLnggKiBzb3VyY2VQaXhlbEIudywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb3VyY2VQaXhlbEEueSAqIHNvdXJjZVBpeGVsQi53LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS56ICog
c291cmNlUGl4ZWxCLncsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlUGl4ZWxBLncgKiBzb3VyY2VQaXhlbEIudyk7CisKKyAgICAgICAgZGVzdGluYXRp
b25QaXhlbC53ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC53LCAwLjAsIDEuMCk7CisgICAgICAg
IGZsb2F0IHJlYyA9IDEgLyBkZXN0aW5hdGlvblBpeGVsLnc7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWwueCA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueCwgMC4wLCAxLjApICogcmVjOworICAg
ICAgICBkZXN0aW5hdGlvblBpeGVsLnkgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnksIDAuMCwg
MS4wKSAqIHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC56ID0gY2xhbXAoZGVzdGluYXRp
b25QaXhlbC56LCAwLjAsIDEuMCkgKiByZWM7CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3Rp
bmF0aW9uLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBkZXN0
aW5hdGlvblBpeGVsKTsKKyAgICB9CisKKyAgICBfX2tlcm5lbCB2b2lkIE91dChfX3dyaXRlX29u
bHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVh
ZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVh
ZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHhBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlBLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHhCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlCKQor
ICAgIHsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50MikgKGdldF9nbG9iYWxfaWQo
MCkgKyB4QSwgZ2V0X2dsb2JhbF9pZCgxKSArIHlBKTsKKyAgICAgICAgaW50MiBzb3VyY2VDb29y
ZEIgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlC
KTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNh
bXBsZXIsIHNvdXJjZUNvb3JkQSk7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEIgPSByZWFk
X2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VDb29yZEIpOworICAgICAgICBzb3VyY2VQ
aXhlbEEueHl6ICo9IHNvdXJjZVBpeGVsQS53OworICAgICAgICBzb3VyY2VQaXhlbEIueHl6ICo9
IHNvdXJjZVBpeGVsQi53OworCisgICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVsID0gKGZs
b2F0NCkoc291cmNlUGl4ZWxBLnggKiAoMSAtIHNvdXJjZVBpeGVsQi53KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQaXhlbEEueSAqICgxIC0gc291
cmNlUGl4ZWxCLncpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZVBpeGVsQS56ICogKDEgLSBzb3VyY2VQaXhlbEIudyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxBLncgKiAoMSAtIHNvdXJjZVBp
eGVsQi53KSk7CisKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC53ID0gY2xhbXAoZGVzdGluYXRp
b25QaXhlbC53LCAwLjAsIDEuMCk7CisgICAgICAgIGZsb2F0IHJlYyA9IDEgLyBkZXN0aW5hdGlv
blBpeGVsLnc7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueCA9IGNsYW1wKGRlc3RpbmF0aW9u
UGl4ZWwueCwgMC4wLCAxLjApICogcmVjOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnkgPSBj
bGFtcChkZXN0aW5hdGlvblBpeGVsLnksIDAuMCwgMS4wKSAqIHJlYzsKKyAgICAgICAgZGVzdGlu
YXRpb25QaXhlbC56ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC56LCAwLjAsIDEuMCkgKiByZWM7
CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikgKGdldF9nbG9iYWxf
aWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBkZXN0aW5hdGlvblBpeGVsKTsKKyAgICB9CisKKyAg
ICBfX2tlcm5lbCB2b2lkIEF0b3AoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCB5QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCB5QikKKyAgICB7CisgICAgICAgIGludDIgc291cmNl
Q29vcmRBID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkg
KyB5QSk7CisgICAgICAgIGludDIgc291cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lk
KDApICsgeEIsIGdldF9nbG9iYWxfaWQoMSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQ
aXhlbEEgPSByZWFkX2ltYWdlZihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAg
ICAgICBmbG9hdDQgc291cmNlUGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwg
c291cmNlQ29vcmRCKTsKKyAgICAgICAgc291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEu
dzsKKyAgICAgICAgc291cmNlUGl4ZWxCLnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAg
ICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKHNvdXJjZVBpeGVsQS54ICogc291
cmNlUGl4ZWxCLncgKyBzb3VyY2VQaXhlbEIueCAqICgxIC0gc291cmNlUGl4ZWxBLncpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS55ICog
c291cmNlUGl4ZWxCLncgKyBzb3VyY2VQaXhlbEIueSAqICgxIC0gc291cmNlUGl4ZWxBLncpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS56
ICogc291cmNlUGl4ZWxCLncgKyBzb3VyY2VQaXhlbEIueiAqICgxIC0gc291cmNlUGl4ZWxBLncp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVs
QS53ICogc291cmNlUGl4ZWxCLncgKyBzb3VyY2VQaXhlbEIudyAqICgxIC0gc291cmNlUGl4ZWxB
LncpKTsKKworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLncgPSBjbGFtcChkZXN0aW5hdGlvblBp
eGVsLncsIDAuMCwgMS4wKTsKKyAgICAgICAgZmxvYXQgcmVjID0gMSAvIGRlc3RpbmF0aW9uUGl4
ZWwudzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC54ID0gY2xhbXAoZGVzdGluYXRpb25QaXhl
bC54LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueSA9IGNsYW1w
KGRlc3RpbmF0aW9uUGl4ZWwueSwgMC4wLCAxLjApICogcmVjOworICAgICAgICBkZXN0aW5hdGlv
blBpeGVsLnogPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnosIDAuMCwgMS4wKSAqIHJlYzsKKwor
ICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgw
KSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgIH0KKworICAgIF9f
a2VybmVsIHZvaWQgWG9yKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgeUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgeUIpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3Jk
QSA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhBLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEp
OworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQiA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSAr
IHhCLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUIpOworICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxB
ID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmRBKTsKKyAgICAgICAg
ZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJj
ZUNvb3JkQik7CisgICAgICAgIHNvdXJjZVBpeGVsQS54eXogKj0gc291cmNlUGl4ZWxBLnc7Cisg
ICAgICAgIHNvdXJjZVBpeGVsQi54eXogKj0gc291cmNlUGl4ZWxCLnc7CisKKyAgICAgICAgZmxv
YXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxvYXQ0KShzb3VyY2VQaXhlbEEueCAqICgxIC0gc291
cmNlUGl4ZWxCLncpICsgc291cmNlUGl4ZWxCLnggKiAoMSAtIHNvdXJjZVBpeGVsQS53KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQaXhlbEEueSAq
ICgxIC0gc291cmNlUGl4ZWxCLncpICsgc291cmNlUGl4ZWxCLnkgKiAoMSAtIHNvdXJjZVBpeGVs
QS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQ
aXhlbEEueiAqICgxIC0gc291cmNlUGl4ZWxCLncpICsgc291cmNlUGl4ZWxCLnogKiAoMSAtIHNv
dXJjZVBpeGVsQS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbEEudyAqICgxIC0gc291cmNlUGl4ZWxCLncpICsgc291cmNlUGl4ZWxCLncg
KiAoMSAtIHNvdXJjZVBpeGVsQS53KSk7CisKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC53ID0g
Y2xhbXAoZGVzdGluYXRpb25QaXhlbC53LCAwLjAsIDEuMCk7CisgICAgICAgIGZsb2F0IHJlYyA9
IDEgLyBkZXN0aW5hdGlvblBpeGVsLnc7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueCA9IGNs
YW1wKGRlc3RpbmF0aW9uUGl4ZWwueCwgMC4wLCAxLjApICogcmVjOworICAgICAgICBkZXN0aW5h
dGlvblBpeGVsLnkgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnksIDAuMCwgMS4wKSAqIHJlYzsK
KyAgICAgICAgZGVzdGluYXRpb25QaXhlbC56ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC56LCAw
LjAsIDEuMCkgKiByZWM7CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50
MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBkZXN0aW5hdGlvblBpeGVs
KTsKKyAgICB9CisKKyk7CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBp
bGVGRUNvbXBvc2l0ZSgpCit7CisgICAgaWYgKCFtX2ZlQ29tcG9zaXRlUHJvZ3JhbSkgeworICAg
ICAgICBtX2ZlQ29tcG9zaXRlUHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKEZFQ29tcG9zaXRlS2Vy
bmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX2ZlQ29tcG9zaXRlUHJvZ3JhbSk7CisKKyAg
ICAgICAgbV9mZUFyaXRobWV0aWMgPSBrZXJuZWxCeU5hbWUobV9mZUNvbXBvc2l0ZVByb2dyYW0s
ICJBcml0aG1ldGljIik7CisgICAgICAgIEFTU0VSVChtX2ZlQXJpdGhtZXRpYyk7CisgICAgICAg
IG1fZmVPdmVyID0ga2VybmVsQnlOYW1lKG1fZmVDb21wb3NpdGVQcm9ncmFtLCAiT3ZlciIpOwor
ICAgICAgICBBU1NFUlQobV9mZU92ZXIpOworICAgICAgICBtX2ZlSW4gPSBrZXJuZWxCeU5hbWUo
bV9mZUNvbXBvc2l0ZVByb2dyYW0sICJJbiIpOworICAgICAgICBBU1NFUlQobV9mZUluKTsKKyAg
ICAgICAgbV9mZU91dCA9IGtlcm5lbEJ5TmFtZShtX2ZlQ29tcG9zaXRlUHJvZ3JhbSwgIk91dCIp
OworICAgICAgICBBU1NFUlQobV9mZU91dCk7CisgICAgICAgIG1fZmVBdG9wID0ga2VybmVsQnlO
YW1lKG1fZmVDb21wb3NpdGVQcm9ncmFtLCAiQXRvcCIpOworICAgICAgICBBU1NFUlQobV9mZUF0
b3ApOworICAgICAgICBtX2ZlWG9yID0ga2VybmVsQnlOYW1lKG1fZmVDb21wb3NpdGVQcm9ncmFt
LCAiWG9yIik7CisgICAgICAgIEFTU0VSVChtX2ZlWG9yKTsKKyAgICB9Cit9CisKK2lubGluZSB2
b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVDb21wb3NpdGUoY2xfbWVtIGRlc3RpbmF0
aW9uLCBJbnRTaXplIGRlc3RpbmF0aW9uU2l6ZSwgY2xfbWVtIHNvdXJjZUEsIGNsX21lbSBzb3Vy
Y2VCLCBGbG9hdFBvaW50IHJlbGF0aXZlU291cmNlTG9jYXRpb25BLCBGbG9hdFBvaW50IHJlbGF0
aXZlU291cmNlTG9jYXRpb25CLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCwgaW50IG1vZGUpCit7CisgICAgc2l6ZV90IGdsb2JhbFNpemVbMl0gPSAgeyBkZXN0aW5hdGlv
blNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpIH07CisgICAgY2xfa2VybmVs
IGNvbXBvc2l0ZU1vZGU7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2ZlQXJp
dGhtZXRpYzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VkVSOgorICAgICAgICBjb21wb3NpdGVNb2RlID0gbV9mZU92ZXI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CisgICAgICAgIGNvbXBvc2l0ZU1vZGUg
PSBtX2ZlSW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
T1VUOgorICAgICAgICBjb21wb3NpdGVNb2RlID0gbV9mZU91dDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICBjb21wb3NpdGVNb2Rl
ID0gbV9mZUF0b3A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfWE9SOgorICAgICAgICBjb21wb3NpdGVNb2RlID0gbV9mZVhvcjsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29tcG9zaXRlTW9kZSA9IG1fZmVPdmVyOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBmbG9hdCB4QSA9IHJlbGF0aXZlU291cmNlTG9jYXRpb25B
LngoKTsKKyAgICBmbG9hdCB5QSA9IHJlbGF0aXZlU291cmNlTG9jYXRpb25BLnkoKTsKKworICAg
IGZsb2F0IHhCID0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIueCgpOworICAgIGZsb2F0IHlCID0g
cmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIueSgpOworCisgICAgY2xTZXRLZXJuZWxBcmcoY29tcG9z
aXRlTW9kZSwgMCwgc2l6ZW9mKGNsX21lbSksICh2b2lkKikgJmRlc3RpbmF0aW9uKTsKKyAgICBj
bFNldEtlcm5lbEFyZyhjb21wb3NpdGVNb2RlLCAxLCBzaXplb2YoY2xfbWVtKSwgKHZvaWQqKSAm
c291cmNlQSk7CisgICAgY2xTZXRLZXJuZWxBcmcoY29tcG9zaXRlTW9kZSwgMiwgc2l6ZW9mKGNs
X21lbSksICh2b2lkKikgJnNvdXJjZUIpOworICAgIGNsU2V0S2VybmVsQXJnKGNvbXBvc2l0ZU1v
ZGUsIDMsIHNpemVvZihjbF9mbG9hdCksICh2b2lkKikgJnhBKTsKKyAgICBjbFNldEtlcm5lbEFy
Zyhjb21wb3NpdGVNb2RlLCA0LCBzaXplb2YoY2xfZmxvYXQpLCAodm9pZCopICZ5QSk7CisgICAg
Y2xTZXRLZXJuZWxBcmcoY29tcG9zaXRlTW9kZSwgNSwgc2l6ZW9mKGNsX2Zsb2F0KSwgKHZvaWQq
KSAmeEIpOworICAgIGNsU2V0S2VybmVsQXJnKGNvbXBvc2l0ZU1vZGUsIDYsIHNpemVvZihjbF9m
bG9hdCksICh2b2lkKikgJnlCKTsKKyAgICBpZiAobW9kZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9BUklUSE1FVElDKSB7CisgICAgICAgIGNsU2V0S2VybmVsQXJnKGNvbXBvc2l0ZU1vZGUsIDcs
IHNpemVvZihjbF9mbG9hdCksICh2b2lkKikgJmsxKTsKKyAgICAgICAgY2xTZXRLZXJuZWxBcmco
Y29tcG9zaXRlTW9kZSwgOCwgc2l6ZW9mKGNsX2Zsb2F0KSwgKHZvaWQqKSAmazIpOworICAgICAg
ICBjbFNldEtlcm5lbEFyZyhjb21wb3NpdGVNb2RlLCA5LCBzaXplb2YoY2xfZmxvYXQpLCAodm9p
ZCopICZrMyk7CisgICAgICAgIGNsU2V0S2VybmVsQXJnKGNvbXBvc2l0ZU1vZGUsIDEwLCBzaXpl
b2YoY2xfZmxvYXQpLCAodm9pZCopICZrNCk7CisgICAgfQorCisgICAgY2xGaW5pc2gobV9jb21t
YW5kUXVldWUpOworICAgIGNsRW5xdWV1ZU5EUmFuZ2VLZXJuZWwobV9jb21tYW5kUXVldWUsIGNv
bXBvc2l0ZU1vZGUsIDIsIDAsIGdsb2JhbFNpemUsIDAsIDAsIDAsIDApOworfQorCitib29sIEZF
Q29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3Bl
bkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb250ZXh0LT5jb21waWxl
RkVDb21wb3NpdGUoKTsKKworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
KyAgICBjbF9tZW0gc291cmNlQSA9IGluLT5hc09wZW5DTEltYWdlKCk7CisKKyAgICBGaWx0ZXJF
ZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGNsX21lbSBzb3VyY2VCID0gaW4yLT5h
c09wZW5DTEltYWdlKCk7CisKKyAgICBjbF9tZW0gZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJ
bWFnZVJlc3VsdCgpOworCisgICAgRmxvYXRQb2ludCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICByZWxhdGl2ZVNvdXJjZUxv
Y2F0aW9uQS5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVsYXRpdmVTb3VyY2VMb2Nh
dGlvbkEueCgpKTsKKyAgICByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQS5zZXRZKGFic29sdXRlUGFp
bnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEueSgpKTsKKworICAgIEZsb2F0
UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxv
Y2F0aW9uKCkpOworICAgIHJlbGF0aXZlU291cmNlTG9jYXRpb25CLnNldFgoYWJzb2x1dGVQYWlu
dFJlY3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQi54KCkpOworICAgIHJlbGF0aXZl
U291cmNlTG9jYXRpb25CLnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNv
dXJjZUxvY2F0aW9uQi55KCkpOworCisgICAgY29udGV4dC0+YXBwbHlGRUNvbXBvc2l0ZShkZXN0
aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNvdXJjZUEsIHNvdXJjZUIsIHJl
bGF0aXZlU291cmNlTG9jYXRpb25BLCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQiwgbV9rMSwgbV9r
MiwgbV9rMywgbV9rNCwgbV90eXBlKTsKKworCisgICAgLy9GbG9hdFJlY3Qgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BF
TkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9PcGVuQ0wvT3BlbkNMRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUZsb29kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kZTJhYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVGbG9vZC5jcHAKQEAg
LTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6
ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxU
RVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKyNpbmNsdWRlICJP
cGVuQ0xDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIFBST0dSQU1f
U1RSKFNyYykgI1NyYworI2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIoU3JjKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBGRUZsb29kS2VybmVsUHJv
Z3JhbSA9CitQUk9HUkFNX1NUUigKKyAgICBjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENMS19O
T1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QIHwgQ0xLX0ZJTFRFUl9O
RUFSRVNUOworCisgICAgX19rZXJuZWwgdm9pZCBGbG9vZChfX3dyaXRlX29ubHkgaW1hZ2UyZF90
IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHIsCisgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgZywKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBiLAorICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGEpCisgICAgeworICAgICAgICBmbG9hdDQgc291cmNl
UGl4ZWwgPSAoZmxvYXQ0KShyLGcsYixhKTsKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0
aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIHNvdXJjZVBp
eGVsKTsKKyAgICB9CispOworCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21w
aWxlRkVGbG9vZCgpCit7CisgICAgaWYgKCFtX0ZFRmxvb2QpIHsKKyAgICAgICAgbV9GRUZsb29k
UHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKEZFRmxvb2RLZXJuZWxQcm9ncmFtKTsKKyAgICAgICAg
QVNTRVJUKG1fRkVGbG9vZFByb2dyYW0pOworICAgICAgICBtX0ZFRmxvb2QgPSBrZXJuZWxCeU5h
bWUobV9GRUZsb29kUHJvZ3JhbSwgIkZsb29kIik7CisgICAgICAgIEFTU0VSVChtX0ZFRmxvb2Qp
OworICAgIH0KK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRUZs
b29kKGNsX21lbSBkZXN0aW5hdGlvbiwgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsQ29sb3IgY29s
b3IpCit7CisgICAgc2l6ZV90IGdsb2JhbFNpemVbMl0gPSAgeyBkZXN0aW5hdGlvblNpemUud2lk
dGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpIH07CisgICAgZmxvYXQgcixnLGIsYTsKKwor
ICAgIGNvbG9yLmdldFJHQkEocixnLGIsYSk7CisKKyAgICBjbFNldEtlcm5lbEFyZyhtX0ZFRmxv
b2QsIDAsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZkZXN0aW5hdGlvbik7CisgICAgY2xTZXRL
ZXJuZWxBcmcobV9GRUZsb29kLCAxLCBzaXplb2YoY2xfZmxvYXQpLCAodm9pZCopICZyKTsKKyAg
ICBjbFNldEtlcm5lbEFyZyhtX0ZFRmxvb2QsIDIsIHNpemVvZihjbF9mbG9hdCksICh2b2lkKikg
JmcpOworICAgIGNsU2V0S2VybmVsQXJnKG1fRkVGbG9vZCwgMywgc2l6ZW9mKGNsX2Zsb2F0KSwg
KHZvaWQqKSAmYik7CisgICAgY2xTZXRLZXJuZWxBcmcobV9GRUZsb29kLCA0LCBzaXplb2YoY2xf
ZmxvYXQpLCAodm9pZCopICZhKTsKKworICAgIGNsRmluaXNoKG1fY29tbWFuZFF1ZXVlKTsKKyAg
ICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29tbWFuZFF1ZXVlLCBtX0ZFRmxvb2QsIDIsIDAs
IGdsb2JhbFNpemUsIDAsIDAsIDAsIDApOworfQorCitib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBw
bHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJD
b250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnRleHQtPmNvbXBpbGVGRUZsb29kKCk7CisKKyAgICBjbF9t
ZW0gZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworCisgICAgQ29sb3Ig
Y29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RP
cGFjaXR5KCkpOworCisgICAgY29udGV4dC0+YXBwbHlGRUZsb29kKGRlc3RpbmF0aW9uLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgY29sb3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBF
TkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVHYXVzc2lhbkJsdXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjFiNGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5D
TC9PcGVuQ0xGRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2lu
Y2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCisjaW5jbHVkZSAiT3BlbkNMQ29udGV4dC5oIgorCisj
aW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CisKKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIq
IEZFR2F1c3NpYW5CbHVyS2VybmVsUHJvZ3JhbSA9CisKKyIiOworCisKK2lubGluZSB2b2lkIEZp
bHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVGRUdhdXNzaWFuQmx1cigpCit7CisgICAgaWYgKCFt
X2ZlR2F1c3NpYW5CbHVyKSB7CisgICAgICAgIG1fZmVHYXVzc2lhbkJsdXJQcm9ncmFtID0gY29t
cGlsZVByb2dyYW0oRkVHYXVzc2lhbkJsdXJLZXJuZWxQcm9ncmFtKTsKKyAgICAgICAgQVNTRVJU
KG1fZmVHYXVzc2lhbkJsdXJQcm9ncmFtKTsKKyAgICAgICAgbV9mZUdhdXNzaWFuQmx1ciA9IGtl
cm5lbEJ5TmFtZShtX2ZlR2F1c3NpYW5CbHVyUHJvZ3JhbSwgIk9mZnNldCIpOworICAgICAgICBB
U1NFUlQobV9mZUdhdXNzaWFuQmx1cik7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJD
b250ZXh0T3BlbkNMOjphcHBseUZFR2F1c3NpYW5CbHVyKGNsX21lbSBkZXN0aW5hdGlvbiwgSW50
U2l6ZSBkZXN0aW5hdGlvblNpemUsIGNsX21lbSBzb3VyY2UpCit7CisKK30KKworYm9vbCBGRUdh
dXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisKKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVS
UykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVJbWFnZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxOGJiNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5D
TEZFSW1hZ2UuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
VGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKworI2luY2x1ZGUgIk9wZW5D
TENvbnRleHQuaCIKKyNpbmNsdWRlICJTVkdGRUltYWdlLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2Rl
ZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1f
U1RSKFNyYykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFSW1hZ2U6OnBsYXRmb3Jt
QXBwbHlPcGVuQ0woKQoreworICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIGNyZWF0
ZU9wZW5DTEltYWdlUmVzdWx0KGFzVW5tdWx0aXBsaWVkSW1hZ2UoYWJzb2x1dGVQYWludFJlY3Qo
KSktPmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3Bl
bkNMRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9PcGVuQ0wvT3BlbkNMRkVPZmZzZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEzNDRjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRU9mZnNldC5jcHAKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYu
dS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYg
RU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorI2luY2x1ZGUgIk9wZW5DTENv
bnRleHQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgUFJPR1JBTV9TVFIoU3Jj
KSAjU3JjCisjZGVmaW5lIFBST0dSQU0oU3JjKSBQUk9HUkFNX1NUUihTcmMpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIEZFT2Zmc2V0S2VybmVsUHJvZ3JhbSA9
CitQUk9HUkFNX1NUUigKKyAgICBfX2tlcm5lbCB2b2lkIE9mZnNldChfX3dyaXRlX29ubHkgaW1h
Z2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1h
Z2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAorICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcl90IHNh
bXBsZXIpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkID0gKGludDIpIChnZXRfZ2xv
YmFsX2lkKDApICsgeCAsIGdldF9nbG9iYWxfaWQoMSkgKyB5KTsKKyAgICAgICAgZmxvYXQ0IHNv
dXJjZVBpeGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7Cisg
ICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIpKGdldF9nbG9iYWxfaWQoMCks
IGdldF9nbG9iYWxfaWQoMSkpLCBzb3VyY2VQaXhlbCk7CisgICAgfQorCispOworCitpbmxpbmUg
dm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVPZmZzZXQoKQoreworICAgIGlmICgh
bV9mZU9mZnNldCkgeworICAgICAgICBtX2ZlT2Zmc2V0UHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFt
KEZFT2Zmc2V0S2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX2ZlT2Zmc2V0UHJvZ3Jh
bSk7CisKKyAgICAgICAgbV9mZU9mZnNldCA9IGtlcm5lbEJ5TmFtZShtX2ZlT2Zmc2V0UHJvZ3Jh
bSwgIk9mZnNldCIpOworICAgICAgICBBU1NFUlQobV9mZU9mZnNldCk7CisgICAgfQorfQorCitp
bmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFT2Zmc2V0KGNsX21lbSBkZXN0
aW5hdGlvbiwgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsIGNsX21lbSBzb3VyY2UsIEZsb2F0UG9p
bnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbikKK3sKKyAgICBzaXplX3QgZ2xvYmFsU2l6ZVsyXSA9
ICB7IGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkgfTsK
KyAgICBmbG9hdCB4ID0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbi54KCk7CisgICAgZmxvYXQgeSA9
IHJlbGF0aXZlU291cmNlTG9jYXRpb24ueSgpOworCisgICAgY2xfc2FtcGxlciBzYW1wbGVyID0g
Y2xDcmVhdGVTYW1wbGVyKGRldmljZUNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENMX0ZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xfQUREUkVT
U19DTEFNUF9UT19FREdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvdW5kKHgp
ID09IHggJiYgcm91bmQoeSkgPT0geSkgPyBDTF9GSUxURVJfTkVBUkVTVCA6IENMX0ZJTFRFUl9M
SU5FQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIGNsU2V0S2Vy
bmVsQXJnKG1fZmVPZmZzZXQsIDAsIHNpemVvZihjbF9tZW0pLCAodm9pZCopICZkZXN0aW5hdGlv
bik7CisgICAgY2xTZXRLZXJuZWxBcmcobV9mZU9mZnNldCwgMSwgc2l6ZW9mKGNsX21lbSksICh2
b2lkKikgJnNvdXJjZSk7CisgICAgY2xTZXRLZXJuZWxBcmcobV9mZU9mZnNldCwgMiwgc2l6ZW9m
KGNsX2Zsb2F0KSwgKHZvaWQqKSAmeCk7CisgICAgY2xTZXRLZXJuZWxBcmcobV9mZU9mZnNldCwg
Mywgc2l6ZW9mKGNsX2Zsb2F0KSwgKHZvaWQqKSAmeSk7CisgICAgY2xTZXRLZXJuZWxBcmcobV9m
ZU9mZnNldCwgNCwgc2l6ZW9mKGNsX3NhbXBsZXIpLCAodm9pZCopICZzYW1wbGVyKTsKKworICAg
IGNsRmluaXNoKG1fY29tbWFuZFF1ZXVlKTsKKyAgICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1f
Y29tbWFuZFF1ZXVlLCBtX2ZlT2Zmc2V0LCAyLCAwLCBnbG9iYWxTaXplLCAwLCAwLCAwLCAwKTsK
K30KKworYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVy
Q29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsK
KworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29udGV4
dC0+Y29tcGlsZUZFT2Zmc2V0KCk7CisKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7ICAgIAorICAgIGNsX21lbSBzb3VyY2UgPSBpbi0+YXNPcGVuQ0xJbWFnZSgpOworICAg
IGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7CisKKyAgICBG
bG9hdFBvaW50IHJlbGF0aXZlU291cmNlTG9jYXRpb24oaW4tPmFic29sdXRlUGFpbnRSZWN0KCku
bG9jYXRpb24oKSk7CisgICAgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbi5zZXRYKGFic29sdXRlUGFp
bnRSZWN0KCkueCgpIC0gKHJlbGF0aXZlU291cmNlTG9jYXRpb24ueCgpICsgZmlsdGVyKCktPmFw
cGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpKSk7CisgICAgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbi5z
ZXRZKGFic29sdXRlUGFpbnRSZWN0KCkueSgpIC0gKHJlbGF0aXZlU291cmNlTG9jYXRpb24ueSgp
ICsgZmlsdGVyKCktPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSkpOworCisgICAgY29udGV4dC0+
YXBwbHlGRU9mZnNldChkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNv
dXJjZSxyZWxhdGl2ZVNvdXJjZUxvY2F0aW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5B
QkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiM2FjZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09w
ZW5DTEZFU291cmNlQWxwaGEuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCisjaW5jbHVkZSAiT3BlbkNMQ29udGV4dC5oIgorCisjaW5jbHVkZSA8aW9zdHJlYW0+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBs
eU9wZW5DTCgpCit7CisgICAgcHJpbnRmKCJwbGF0Zm9ybUFwcGx5T3BlbkNMXG5mZVNvdXJjZUFs
cGhhXG4iKTsKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4
dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworICAgIGlmICgh
ZmlsdGVyLT5zb3VyY2VJbWFnZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci0+c291cmNlSW1hZ2UoKTsKKyAg
ICBSZWZQdHI8Qnl0ZUFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSxzb3VyY2VJbWFnZS0+aW50ZXJu
YWxTaXplKCkpKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IHNvdXJjZUltYWdlRGF0YS0+
ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IGRzdCArIHNvdXJjZUltYWdlRGF0YS0+
bGVuZ3RoKCk7CisgICAgd2hpbGUgKGRzdCA8IGVuZCkgeworICAgICAgICBkc3RbMF0gPSAwOwor
ICAgICAgICBkc3RbMV0gPSAwOworICAgICAgICBkc3RbMl0gPSAwOworICAgICAgICBkc3QgKz0g
NDsKKyAgICB9CisKKyAgICBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEt
PmRhdGEoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVu
Q0xGRVNvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lYjY3NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVTb3VyY2VHcmFw
aGljLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFz
IEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYg
RU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRmlsdGVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisjaW5j
bHVkZSAiT3BlbkNMQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291
cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9w
ZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmlsdGVyKiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKKyAgICBpZiAoIWZpbHRlci0+c291cmNlSW1hZ2UoKSkgeyAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
ID0gZmlsdGVyLT5zb3VyY2VJbWFnZSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNvdXJjZUlt
YWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJ
bnRQb2ludCgpLHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworCisgICAgY3JlYXRlT3Bl
bkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVS
UykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2MmYxOWZjLi4yYTJmYmE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oCkBAIC0zNSw2ICszNSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxh
dGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAppbmRleCAwNmU2ZDA5Li44ZTM5ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzYsNiAr
MzYsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFt
ZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVO
QUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNl
bmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggNjJhMWFmNS4uNGVmNjE0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAK
QEAgLTk0LDYgKzk0LDcgQEAgUmVuZGVyT2JqZWN0KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVy
ZXIoKSBjb25zdAogICAgIHJldHVybiBocmVmRWxlbWVudC0+cmVuZGVyZXIoKTsKIH0KIAorCiB2
b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpOwpAQCAtMTE1LDkgKzExNiwxMSBAQCB2
b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIG1fcHJlc2VydmVB
c3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKICAgICB9CiAKKyAg
ICBwcmludGYoIjEgIEZFSW1hZ2UgJWxmICVsZiAlbGYgJWxmXG4iLCBkZXN0UmVjdC53aWR0aCgp
LCBkZXN0UmVjdC5oZWlnaHQoKSwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpKTsK
KwogICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0
aW9uKCk7CiAgICAgZGVzdFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0
aW9uLnkoKSk7Ci0KKyAgICAgcHJpbnRmKCJTU1MgbG9jYXRpb24gRkVJbWFnZSAlbGYgJWxmICVs
ZiAlbGZcbiIsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBzcmNSZWN0LngoKSwgc3JjUmVj
dC55KCkpOwogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtID0gc3ZnRmlsdGVyLT5hYnNvbHV0ZVRyYW5zZm9ybSgpOwog
ICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zv
cm0pOwpAQCAtMTM5LDYgKzE0Miw4IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHByaW50ZigiMiAgRkVJbWFnZSAl
bGYgJWxmICVsZiAlbGZcbiIsIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBz
cmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCkpOworCiAgICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRl
c3RSZWN0LCBzcmNSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IDViYWQ5NTAuLjc3MzU3YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTM5LDYg
KzM5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFSW1hZ2U+IGNyZWF0ZVdp
dGhJUklSZWZlcmVuY2UoRmlsdGVyKiwgRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZv
cm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotLSAKMS43LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163638</attachid>
            <date>2012-09-12 08:34:57 -0700</date>
            <delta_ts>2012-09-12 08:34:57 -0700</delta_ts>
            <desc>Example implementation - OpenCL</desc>
            <filename>opencl.patch</filename>
            <type>text/plain</type>
            <size>140294</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IDg3MzI1NGUuLjcwYzkzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDAxNCw2
ICs0MDE0LDI2IEBAIGNvbnRhaW5zKENPTkZJRywgb3BlbmdsLXNoaW1zKSB7CiAgICAgREVGSU5F
UyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT1BF
TkNMPTEpIHsKKyAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNM
L09wZW5DTENvbnRleHQuaAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9PcGVuQ0wvT3BlbkNMQ29udGV4dC5jcHAKKyAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFSW1hZ2UuY3BwCisgICAgU09VUkNFUyArPSBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUNvbXBvc2l0ZS5jcHAKKyAgICBT
T1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFQmxlbmQu
Y3BwCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVu
Q0xGRUZsb29kLmNwcAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9P
cGVuQ0wvT3BlbkNMRkVPZmZzZXQuY3BwCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCisgICAgU09VUkNFUyAr
PSBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNw
cAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNM
RkVUdXJidWxlbmNlLmNwcAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9PcGVuQ0wvT3BlbkNMRkVDb2xvck1hdHJpeC5jcHAKKyAgICBTT1VSQ0VTICs9IHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFQ29udm9sdmVNYXRyaXguY3BwCisgICAg
I1NPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAKKyAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvT3BlbkNML09wZW5DTEZFTWVyZ2UuY3BwCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRU1vcnBob2xvZ3kuY3BwCisgICAgU09VUkNFUyAr
PSBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVRpbGUuY3BwCisgICAg
REVGSU5FUyArPSBPUEVOQ0w9MQorfQorCiB1c2U/KEdSQVBISUNTX1NVUkZBQ0UpIHsKICAgICBt
YWMgewogICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9H
cmFwaGljc1N1cmZhY2VNYWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDkxNzhjYTIuLjE2YmM3ZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJpCkBAIC0yNjMsNiArMjYzLDExIEBAIHVuaXh8d2luMzItZysrKiB7CiAg
ICAgUU1BS0VfUEtHQ09ORklHX1JFUVVJUkVTID0gUXRDb3JlIFF0R3VpIFF0TmV0d29yayBRdFdp
ZGdldHMKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX09QRU5DTD0xKXsKKyAgUU1BS0Vf
TEZMQUdTICs9IC1JL3Vzci9pbmNsdWRlLyAtTC91c3IvbGliLworICBMSUJTICs9IC1sT3BlbkNM
Cit9CisKICMgRGlzYWJsZSBDKysweCBtb2RlIGluIFdlYkNvcmUgZm9yIHRob3NlIHdobyBlbmFi
bGVkIGl0IGluIHRoZWlyIFF0J3MgbWtzcGVjCiAqLWcrKyo6UU1BS0VfQ1hYRkxBR1MgLT0gLXN0
ZD1jKysweCAtc3RkPWdudSsrMHgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCBlNThjOGEzLi5jNWQxOTc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApA
QCAtNTIsNyArNTIsOSBAQCBwdWJsaWM6CiAjaWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29s
IHBsYXRmb3JtQXBwbHlTa2lhKCk7CiAjZW5kaWYKLQorI2lmIEVOQUJMRShPUEVOQ0wpCisgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oCmluZGV4IDI3YTRhYzguLjUxNzdhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
CkBAIC00OSw2ICs0OSw5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0
b3I8ZmxvYXQ+Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7
CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5D
TCgpOworI2VuZGlmCiAjaWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBw
bHlTa2lhKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGE5
MzcxNDguLjgzOTc2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTc0
LDYgKzE3NCwxOCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgfQogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgYXNJbWFnZUJ1ZmZlcigpOwor
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSA9IGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJj
ZUltYWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGNyZWF0ZU9w
ZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCiB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmdldFZhbHVlcyh1bnNp
Z25lZCBjaGFyIHJWYWx1ZXNbMjU2XSwgdW5zaWduZWQgY2hhciBnVmFsdWVzWzI1Nl0sIHVuc2ln
bmVkIGNoYXIgYlZhbHVlc1syNTZdLCB1bnNpZ25lZCBjaGFyIGFWYWx1ZXNbMjU2XSkKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5oCmluZGV4IDE4MTgzZTYuLjE2OTMwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5oCkBAIC03OSw2ICs3OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFscGhhRnVuY3Rpb24o
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwogCiAgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBi
b29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIHZp
cnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U2tpYSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXgg
ZGYwNDI2YS4uODM4ODZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJM
RShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRp
ZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDgxZWJh
MWQuLmY5NzVhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC03MSw2ICs3MSw5IEBAIHB1
YmxpYzoKICAgICBib29sIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0
dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lk
IGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUN1c3RvbUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAppbmRleCBkNjVmZjk3Li41YmJhOWU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmls
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q3VzdG9tRmlsdGVyLmNwcApAQCAtMTM1LDYgKzEzNSwxOCBAQCB2b2lkIEZFQ3VzdG9tRmlsdGVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBjbGVhclNoYWRlclJlc3VsdCgpOwog
fQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBw
bHlPcGVuQ0woKQoreworICAgIGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJ
bWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSxzb3VyY2VJ
bWFnZS0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdChzb3Vy
Y2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogdm9p
ZCBGRUN1c3RvbUZpbHRlcjo6Y2xlYXJTaGFkZXJSZXN1bHQoKQogewogICAgIGNsZWFyUmVzdWx0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ3VzdG9tRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKaW5kZXggOTZiYjkxOC4uYmRjMzA3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21G
aWx0ZXIuaApAQCAtNjQsNiArNjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wg
cGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsK
IAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmlu
ZGV4IDdmNTU0YWEuLjk2N2RlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0x
MzMsNiArMTMzLDE4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgfQogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVEaXNwbGFjZW1l
bnRNYXA6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIGFzSW1hZ2VCdWZmZXIoKTsKKyAg
ICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Ug
PSBhc0ltYWdlQnVmZmVyKCk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJ
bWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3Qo
SW50UG9pbnQoKSxzb3VyY2VJbWFnZS0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBjcmVhdGVPcGVu
Q0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKwogdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZHVtcCgpCiB7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmgKaW5kZXggNDdiNTRkNS4uZGNhYjI5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuaApAQCAtNTEsNiArNTEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTY2FsZShm
bG9hdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYg
RU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOwor
I2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IGMxZWZh
MmEuLjA0NDBhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTExOSw2ICsxMTksMTggQEAgdm9p
ZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkcmF3aW5nUmVnaW9uKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitib29sIEZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgYXNJbWFnZUJ1ZmZlcigpOwor
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSA9IGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJj
ZUltYWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGNyZWF0ZU9w
ZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCiB2b2lkIEZFRHJvcFNoYWRvdzo6ZHVtcCgpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuaAppbmRleCBkMTU1YjQ2Li5jYzJlNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTUyLDYgKzUy
LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9hdCBjYWxjdWxhdGVTdGREZXZpYXRpb24oZmxv
YXQpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVO
QUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNl
bmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggZTA0ODRiNC4uZTc4YjY0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgK
QEAgLTQwLDYgKzQwLDkgQEAgcHVibGljOgogICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFC
TEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5k
aWYKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDQzNzMx
ZjcuLjk3MDZjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0zMDUsNiArMzA1LDE4IEBA
IHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgcGxhdGZv
cm1BcHBseShzcmNQaXhlbEFycmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVs
U2l6ZVksIHBhaW50U2l6ZSk7CiB9CiAKKyNpZiBFTkFCTEUoT1BFTkNMKQorYm9vbCBGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgYXNJbWFnZUJ1ZmZlcigpOwor
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSA9IGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJj
ZUltYWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGNyZWF0ZU9w
ZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCiB2b2lkIEZFR2F1c3NpYW5CbHVyOjpkdW1wKCkKIHsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaAppbmRleCA3YjNiZGNlLi42OTQ2YTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBA
IC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlU3RkRGV2
aWF0aW9uKGZsb2F0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogICAgIAogICAgIHZpcnR1
YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXgg
YmNiM2MxNi4uZDMyOTU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC00MDYsNiArNDA2LDE4IEBAIHZv
aWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBkcmF3TGlnaHRpbmco
c3JjUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNp
emUuaGVpZ2h0KCkpOwogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wgRkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgYXNJbWFnZUJ1ZmZlcigpOworICAgIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGFzSW1h
Z2VCdWZmZXIoKTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZUltYWdlRGF0
YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgpLHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGNyZWF0ZU9wZW5DTEltYWdl
UmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMVEVS
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmgKaW5kZXggNDQ4NzgzNS4uYzNkZDZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTQ2LDYg
KzQ2LDkgQEAgc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uOwogY2xhc3MgRkVM
aWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYKICNpZiBVU0UoU0tJQSkKICAg
ICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseVNraWEoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCAzMDIz
MzZiLi5mYjRmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCiAgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVh
bCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggMTlk
YTYzNS4uOTk0NjQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC00Nyw2ICs0Nyw5IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBs
YXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIHZpcnR1YWwg
Ym9vbCBwbGF0Zm9ybUFwcGx5U2tpYSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggZTc1ZmViZC4uZDUx
MDIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaApAQCAtMzksNiArMzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREeShm
bG9hdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYg
RU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOwor
I2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IDYzMzI3NmEuLmRlNjVkNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
aApAQCAtMzMsNiArMzMsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVUaWxl
PiBjcmVhdGUoRmlsdGVyKiBmaWx0ZXIpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRm
b3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oCmluZGV4IDQ3YzhiZWUuLjg0ZmYxMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNjEsNiArNjEs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBhMmJiNTRkLi44
NGZkOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0zNiw3ICszNiwxMiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXIqIGZpbHRlcikK
KyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIDogbV9vcGVuY2xJbWFnZVJlc3VsdCgwKQorICAgICwg
bV9hbHBoYUltYWdlKGZhbHNlKQorI2Vsc2UKICAgICA6IG1fYWxwaGFJbWFnZShmYWxzZSkKKyNl
bmRpZgogICAgICwgbV9maWx0ZXIoZmlsdGVyKQogICAgICwgbV9oYXNYKGZhbHNlKQogICAgICwg
bV9oYXNZKGZhbHNlKQpAQCAtNTEsNiArNTYsMTAgQEAgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QoRmlsdGVyKiBmaWx0ZXIpCiAKIEZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpCiB7Cisj
aWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuY2xJbWFnZVJlc3VsdCkKKyAgICAgICAg
Y2xSZWxlYXNlTWVtT2JqZWN0KG1fb3BlbmNsSW1hZ2VSZXN1bHQpOworI2VuZGlmCiB9CiAKIGlu
bGluZSBib29sIGlzRmlsdGVyU2l6ZVZhbGlkKEludFJlY3QgcmVjdCkKQEAgLTEwOCw3ICsxMTcs
MTEgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQgZWZmZWN0J3Mg
Y29sb3Igc3BhY2UuCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICAgICAgaW4tPnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2VPcGVuQ0wobV9jb2xvclNwYWNlKTsKKyNlbHNlCiAgICAgICAgIGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fY29sb3JTcGFjZSk7CisjZW5kaWYKICAgICB9CiAK
ICAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpAQCAtMTIzLDYgKzEzNiwxMCBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgIH0KICAgICAKICAgICAvLyBBZGQgcGxhdGZv
cm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgorI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKHBsYXRmb3JtQXBwbHlPcGVuQ0woKSkKKyAgICAgICAg
cmV0dXJuOworI2VuZGlmCiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKHBsYXRmb3JtQXBwbHlTa2lh
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4Nyw2ICsyMDQsMTIgQEAgdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KCkKICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5jbGVh
cigpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIGlm
IChtX29wZW5jbEltYWdlUmVzdWx0KXsKKyAgICAgICAgY2xSZWxlYXNlTWVtT2JqZWN0KG1fb3Bl
bmNsSW1hZ2VSZXN1bHQpOworICAgICAgICBtX29wZW5jbEltYWdlUmVzdWx0ID0gMDsKKyAgICB9
CisjZW5kaWYKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcigp
CkBAIC0xOTUsNiArMjE4LDEwIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VC
dWZmZXIoKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAgICBpZiAobV9vcGVuY2xJbWFnZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGdldE9w
ZW5DTEltYWdlUmVzdWx0KCk7CisjZW5kaWYKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgMSwgbV9yZXN1bHRD
b2xvclNwYWNlLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKICAgICBJbnRSZWN0IGRlc3Rp
bmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
aWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQpAQCAtMjA0LDYgKzIzMSwyNyBAQCBJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitJbWFnZUJ1ZmZl
ciogRmlsdGVyRWZmZWN0OjpnZXRPcGVuQ0xJbWFnZVJlc3VsdCgpCit7CisgICAgRmlsdGVyQ29u
dGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAg
ICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBzaXplX3Qgb3JpZ2luWzNdID0geyAwLCAwLCAwIH07
CisgICAgc2l6ZV90IHJlZ2lvblszXSA9IHsgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpLCAxfTsKKworICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZGVzdGluYXRpb25QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0
ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdo
dCgpICogNCk7CisKKyAgICBjbEVucXVldWVSZWFkSW1hZ2UoY29udGV4dC0+Y29tbWFuZFF1ZXVl
KCksIG1fb3BlbmNsSW1hZ2VSZXN1bHQsIENMX1RSVUUsIG9yaWdpbiwgcmVnaW9uLCAwLCAwLCBk
ZXN0aW5hdGlvblBpeGVsQXJyYXktPmRhdGEoKSwgMCwgMCwgMCk7CisKKyAgICBtX2ltYWdlQnVm
ZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheShV
bm11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5nZXQoKSwgZGVzdGluYXRpb25SZWN0
LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKworICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChyZWN0KSk7CkBAIC0zNjMs
NiArNDExLDI2IEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpOwogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK2NsX21lbSBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSkKK3sKKyAgICBB
U1NFUlQoIWhhc1Jlc3VsdCgpKTsKKyAgICBjbF9pbWFnZV9mb3JtYXQgY2xJbWFnZUZvcm1hdDsK
KyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfb3JkZXIgPSBDTF9SR0JBOworICAgIGNs
SW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgPSBDTF9VTk9STV9JTlQ4OworCisg
ICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNv
bnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgY2xfaW50IGVyOworICAgIG1fb3Bl
bmNsSW1hZ2VSZXN1bHQgPSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgp
LCBzb3VyY2UgPyAoQ0xfTUVNX1JFQURfV1JJVEUgfCBDTF9NRU1fQ09QWV9IT1NUX1BUUikgOiBD
TF9NRU1fUkVBRF9XUklURSwKKyAgICAgICAgJmNsSW1hZ2VGb3JtYXQsIG1fYWJzb2x1dGVQYWlu
dFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSwgMCwgc291cmNlLCAm
ZXIpOworICAgIGlmIChlciAhPSBDTF9TVUNDRVNTKQorICAgICAgICBjb250ZXh0LT5PcGVuQ0xQ
cmludEVycm9yKGVyKTsKKyAgICBjb250ZXh0LT5PcGVuQ0xEZWJ1Z0ltYWdlKG1fb3BlbmNsSW1h
Z2VSZXN1bHQpOworICAgIHJldHVybiBtX29wZW5jbEltYWdlUmVzdWx0OworfQorI2VuZGlmCisK
IHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2Ug
ZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCkBAIC0zODksNiArNDU3LDI1IEBAIHZvaWQg
RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK3ZvaWQgRmlsdGVyRWZm
ZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlT3BlbkNMKENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSkKK3sKKyAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRzdENvbG9yU3BhY2UgPT0gbV9yZXN1
bHRDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fb3BlbmNsSW1hZ2VS
ZXN1bHQpIHsKKyAgICAgICAgYXNPcGVuQ0xJbWFnZSgpOworICAgICAgICBBU1NFUlQobV9vcGVu
Y2xJbWFnZVJlc3VsdCk7CisgICAgfQorCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4
dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIG1fb3BlbmNsSW1hZ2VS
ZXN1bHQgPSBjb250ZXh0LT5PcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKG1fb3BlbmNsSW1hZ2VS
ZXN1bHQsIG1fcmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSwgYWJzb2x1dGVQYWludFJl
Y3QoKSk7CisKKyAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkc3RDb2xvclNwYWNlOworfQorI2Vu
ZGlmCisKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgaW50KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZHVt
cCB0aGUgc3ViUmVnaW9ucyBvZiB0aGUgZmlsdGVyIHByaW1pdGl2ZXMgaGVyZSBsYXRlci4gVGhp
cyBpc24ndApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMTYyMGFiZi4uNDhhZDQ4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVk
ZSAiT3BlbkNML09wZW5DTENvbnRleHQuaCIKKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgZmxvYXQg
a01heEZpbHRlclNpemUgPSA1MDAwLjBmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Miw2
ICs2NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoVWludDhD
bGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBjb3B5
UHJlbXVsdGlwbGllZEltYWdlKFVpbnQ4Q2xhbXBlZEFycmF5KiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYpOwogCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBjbF9tZW0gYXNPcGVuQ0xJbWFn
ZSgpIHsgcmV0dXJuIG1fb3BlbmNsSW1hZ2VSZXN1bHQ7IH0KKyAgICBJbWFnZUJ1ZmZlciogZ2V0
T3BlbkNMSW1hZ2VSZXN1bHQoKTsKKyNlbmRpZgorCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVj
dCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZm
ZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CkBAIC02
OSw3ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QK
ICAgICB7CiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMg
Y2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCB8fCBtX29wZW5jbEltYWdlUmVzdWx0OworI2Vsc2UKICAgICAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCB8fCBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKKyNlbmRpZgogICAgIH0KIAogICAgIEludFJlY3QgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC05Myw2ICsxMDYsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKKyNp
ZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCkg
PSAwOworI2VuZGlmCiAjaWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBw
bHlTa2lhKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMTMzLDYgKzE0OSw5IEBAIHB1
YmxpYzoKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KICAgICB2b2lkIHNldENvbG9yU3BhY2UoQ29sb3JTcGFjZSBjb2xvclNwYWNlKSB7
IG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoQ29sb3JTcGFjZSk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2b2lkIHRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2VPcGVuQ0woQ29sb3JTcGFjZSk7CisjZW5kaWYKIAogcHJvdGVj
dGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXIqKTsKQEAgLTE0MCw2ICsxNTksOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
VWludDhDbGFtcGVkQXJyYXkqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAg
VWludDhDbGFtcGVkQXJyYXkqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgY2xfbWVtIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHVuc2ln
bmVkIGNoYXIqID0gMCk7CisjZW5kaWYKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0
ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRo
CiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAs
IGFscGhhXS4KQEAgLTE1Myw3ICsxNzUsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIEZpbHRlckVmZmVj
dFZlY3RvciBtX2lucHV0RWZmZWN0czsKLQorI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgY2xfbWVt
IG1fb3BlbmNsSW1hZ2VSZXN1bHQ7CisjZW5kaWYKICAgICBib29sIG1fYWxwaGFJbWFnZTsKIAog
ICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTENvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMQ29u
dGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyODMyYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
T3BlbkNML09wZW5DTENvbnRleHQuY3BwCkBAIC0wLDAgKzEsNDE4IEBACisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIk9wZW5DTENvbnRleHQuaCIK
KyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAic3RkaW8u
aCIKKworI2RlZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMp
IFBST0dSQU1fU1RSKFNyYykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJDb250ZXh0
T3BlbkNMKiBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCkKK3sKKyAgICAgc3RhdGljIGJv
b2wgd2FzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGNvbnRleHQgPSAwOworCisgICAgIGlmICh3YXNJbml0aWFsaXplZCkKKyAgICAgICAgIHJl
dHVybiBjb250ZXh0OworCisjaWZkZWYgTkRFQlVHCisgICAgIHByaW50ZigiZGVidWdcbiIpOwor
I2VuZGlmCisgICAgIHdhc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgY29udGV4dCA9IG5ldyBG
aWx0ZXJDb250ZXh0T3BlbkNMKCk7CisKKyAgICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBjb250ZXh0
LgorICAgICBjbF9pbnQgZXJyTnVtOworICAgICBjbF9kZXZpY2VfaWQgKmRldmljZXM7CisgICAg
IGNsX3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZvcm1JZDsKKyAgICAgc2l6ZV90IGRldmljZUJ1ZmZl
clNpemUgPSAtMTsKKworICAgICBlcnJOdW0gPSBjbEdldFBsYXRmb3JtSURzKDEsICZmaXJzdFBs
YXRmb3JtSWQsIE5VTEwpOworICAgICBjbF9jb250ZXh0X3Byb3BlcnRpZXMgY29udGV4dFByb3Bl
cnRpZXNbXSA9IHsgQ0xfQ09OVEVYVF9QTEFURk9STSwgKGNsX2NvbnRleHRfcHJvcGVydGllcylm
aXJzdFBsYXRmb3JtSWQsIDB9OworICAgICBjb250ZXh0LT5tX2RldmljZUNvbnRleHQgPSBjbENy
ZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGllcywgQ0xfREVWSUNFX1RZUEVfR1BV
LCBOVUxMLCBOVUxMLCAmZXJyTnVtKTsKKyAgICAgaWYgKGVyck51bSAhPSBDTF9TVUNDRVNTKSB7
CisgICAgICAgICBjb250ZXh0LT5tX2RldmljZUNvbnRleHQgPSBjbENyZWF0ZUNvbnRleHRGcm9t
VHlwZShjb250ZXh0UHJvcGVydGllcywgQ0xfREVWSUNFX1RZUEVfQ1BVLCBOVUxMLCBOVUxMLCAm
ZXJyTnVtKTsKKyAgICAgICAgIGlmIChlcnJOdW0gIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgICAg
IHJldHVybiBjb250ZXh0OworICAgICB9CisKKyAgICAgZXJyTnVtID0gY2xHZXRDb250ZXh0SW5m
byhjb250ZXh0LT5tX2RldmljZUNvbnRleHQsIENMX0NPTlRFWFRfREVWSUNFUywgMCwgTlVMTCwg
JmRldmljZUJ1ZmZlclNpemUpOworICAgICBpZiAoZXJyTnVtICE9IENMX1NVQ0NFU1MpCisgICAg
ICAgICByZXR1cm4gY29udGV4dDsKKworICAgICBpZiAoZGV2aWNlQnVmZmVyU2l6ZSA8PSAwKQor
ICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisKKyAgICAgZGV2aWNlcyA9IG5ldyBjbF9kZXZpY2Vf
aWRbZGV2aWNlQnVmZmVyU2l6ZSAvIHNpemVvZihjbF9kZXZpY2VfaWQpXTsKKyAgICAgZXJyTnVt
ID0gY2xHZXRDb250ZXh0SW5mbyhjb250ZXh0LT5tX2RldmljZUNvbnRleHQsIENMX0NPTlRFWFRf
REVWSUNFUywgZGV2aWNlQnVmZmVyU2l6ZSwgZGV2aWNlcywgTlVMTCk7CisgICAgIGlmIChlcnJO
dW0gIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgIHJldHVybiBjb250ZXh0OworCisgICAgIGNvbnRl
eHQtPm1fY29tbWFuZFF1ZXVlID0gY2xDcmVhdGVDb21tYW5kUXVldWUoY29udGV4dC0+bV9kZXZp
Y2VDb250ZXh0LCBkZXZpY2VzWzBdLCAwLCBOVUxMKTsKKyAgICAgaWYgKGNvbnRleHQtPm1fY29t
bWFuZFF1ZXVlID09IE5VTEwpCisgICAgICAgICByZXR1cm4gY29udGV4dDsKKworICAgICBjb250
ZXh0LT5tX2RldmljZSA9IGRldmljZXNbMF07CisgICAgIGRlbGV0ZSBbXSBkZXZpY2VzOworCisg
ICAgIGNsX2Jvb2wgaW1hZ2VTdXBwb3J0ID0gQ0xfRkFMU0U7CisgICAgIGNsR2V0RGV2aWNlSW5m
byhjb250ZXh0LT5tX2RldmljZSwgQ0xfREVWSUNFX0lNQUdFX1NVUFBPUlQsIHNpemVvZihjbF9i
b29sKSwgJmltYWdlU3VwcG9ydCwgTlVMTCk7CisgICAgIGlmIChpbWFnZVN1cHBvcnQgIT0gQ0xf
VFJVRSkKKyAgICAgICAgIHJldHVybiBjb250ZXh0OworCisgICAgIHJldHVybiBjb250ZXh0Owor
fQorCitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKGNvbnN0
IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBjbF9pbnQgZXJyTnVtOworICAgIGNsX3Byb2dyYW0gcHJv
Z3JhbTsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBwcm9ncmFtID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNv
dXJjZShjb250ZXh0LT5tX2RldmljZUNvbnRleHQsIDEsIChjb25zdCBjaGFyKiopICZzb3VyY2Us
IE5VTEwsICZlcnJOdW0pOworICAgIGlmIChlcnJOdW0gIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAg
T3BlbkNMUHJpbnRFcnJvcihlcnJOdW0pOworICAgIGlmIChlcnJOdW0gIT0gQ0xfU1VDQ0VTUykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBlcnJOdW0gPSBjbEJ1aWxkUHJvZ3JhbShwcm9ncmFt
LCAwLCAwLCAwLCAwLCAwKTsKKyAgICBpZiAoZXJyTnVtICE9IENMX1NVQ0NFU1MpCisgICAgICAg
IE9wZW5DTFByaW50RXJyb3IoZXJyTnVtKTsKKyAgICBpZiAoZXJyTnVtICE9IENMX1NVQ0NFU1Mp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHByb2dyYW07Cit9CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBPcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSA9CitQUk9H
UkFNX1NUUigKKyAgICBjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENMS19OT1JNQUxJWkVEX0NP
T1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QX1RPX0VER0UgfCBDTEtfRklMVEVSX05FQVJF
U1Q7CisKKyAgICBfX2tlcm5lbCB2b2lkIE9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UoX19yZWFk
X29ubHkgaW1hZ2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdGFudCBmbG9hdCAqY2xM
b29rVXBUYWJsZSkKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmQgPSAoaW50MikgKGdl
dF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpOworICAgICAgICBmbG9hdDQgcGl4ZWwg
PSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKKworICAgICAgICBw
aXhlbCA9IChmbG9hdDQpKGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueCAqIDI1NSkp
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbExvb2tVcFRhYmxlWyhpbnQpKHJvdW5kKHBp
eGVsLnkgKiAyNTUpKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xMb29rVXBUYWJsZVso
aW50KShyb3VuZChwaXhlbC56ICogMjU1KSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsLncpOworCisgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291cmNlQ29vcmQs
IHBpeGVsKTsKKyAgICB9CispOworCitjbF9tZW0gRmlsdGVyQ29udGV4dE9wZW5DTDo6T3BlbkNM
VHJhbnNmb3JtQ29sb3JTcGFjZShjbF9tZW0gc291cmNlLCBDb2xvclNwYWNlIHJlc3VsdENvbG9y
U3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSwgSW50UmVjdCBzb3VyY2VTaXplKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY2xfbWVtLCBkZXZpY2VSZ2JMVVQsICgpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNsX21lbSwgbGluZWFyUmdiTFVULCAoKSk7CisKKyAgICBpZiAo
KHJlc3VsdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZUxpbmVhclJHQiAmJiByZXN1bHRDb2xvclNw
YWNlICE9IENvbG9yU3BhY2VEZXZpY2VSR0IpCisgICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9
IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlRGV2aWNl
UkdCKSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsKKworCisgICAgRmlsdGVyQ29udGV4dE9wZW5D
TCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIGNsX2lt
YWdlX2Zvcm1hdCBjbEltYWdlRm9ybWF0OworICAgIGNsSW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5l
bF9vcmRlciA9IENMX1JHQkE7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX2RhdGFf
dHlwZSA9IENMX1VOT1JNX0lOVDg7CisKKyAgICBjbF9tZW0gZGVzdGluYXRpb24gPSBjbENyZWF0
ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9XUklURSwKKyAg
ICAgICAgJmNsSW1hZ2VGb3JtYXQsIHNvdXJjZVNpemUud2lkdGgoKSwgc291cmNlU2l6ZS5oZWln
aHQoKSwgMCwgMCwgMCk7CisKKyAgICBpZighbV9PcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlUHJv
Z3JhbSl7CisgICAgICAgIG1fT3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0gPSBjb21w
aWxlUHJvZ3JhbShPcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSk7CisgICAg
ICAgIG1fT3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZSA9IGtlcm5lbEJ5TmFtZShtX09wZW5DTFRy
YW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtLCAiT3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZSIpOwor
ICAgIH0KKworICAgIFJ1bktlcm5lbCBrZXJuZWwoY29udGV4dCwgbV9PcGVuQ0xUcmFuc2Zvcm1D
b2xvclNwYWNlLCBzb3VyY2VTaXplLndpZHRoKCksIHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0
aW5hdGlvbik7CisKKyAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlTGluZWFyUkdC
KSB7CisgICAgICAgIGlmICghbGluZWFyUmdiTFVUKSB7CisgICAgICAgICAgICBWZWN0b3I8Zmxv
YXQ+IGxvb2tVcFRhYmxlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1
NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpICAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IChjb2xvciA8PSAwLjA0MDQ1ZiA/IGNvbG9yIC8gMTIuOTJm
IDogcG93KChjb2xvciArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpKTsKKyAgICAgICAgICAgICAg
ICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBsb29rVXBUYWJsZS5hcHBl
bmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGluZWFyUmdiTFVUID0gY29udGV4dC0+dXBsb2FkQnVmZmVyKGNvbnRleHQsIGxvb2tVcFRh
YmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0KKyAgICAgICAga2Vy
bmVsLmFkZEFyZ3VtZW50KGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNw
YWNlID09IENvbG9yU3BhY2VEZXZpY2VSR0IpIHsKKyAgICAgICAgaWYgKCFkZXZpY2VSZ2JMVVQp
IHsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gbG9va1VwVGFibGU7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9h
dCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSAocG93Zihjb2xv
ciwgMS4wZiAvIDIuNGYpICogMS4wNTVmKSAtIDAuMDU1ZjsKKyAgICAgICAgICAgICAgICBjb2xv
ciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6
bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBsb29rVXBUYWJsZS5hcHBlbmQoKHJv
dW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGV2
aWNlUmdiTFVUID0gY29udGV4dC0+dXBsb2FkQnVmZmVyKGNvbnRleHQsIGxvb2tVcFRhYmxlLmRh
dGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0KKyAgICAgICAga2VybmVsLmFk
ZEFyZ3VtZW50KGRldmljZVJnYkxVVCk7CisgICAgfQorCisgICAga2VybmVsLnJ1bigpOworCisg
ICAgcmV0dXJuIGRlc3RpbmF0aW9uOworfQorCitzdGF0aWMgY29uc3QgY2hhciogRmlsbEtlcm5l
bFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCisgICAgICAgICAgICBfX2tlcm5lbCB2b2lkIEZpbGwo
X193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZmxvYXQ0IHNvdXJjZVBpeGVsID0gKGZsb2F0NCkocixnLGIsYSk7CisgICAgICAgICAgICAgICAg
d3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2ds
b2JhbF9pZCgxKSksIHNvdXJjZVBpeGVsKTsKKyAgICAgICAgICAgIH0KKyk7CisKK3ZvaWQgRmls
dGVyQ29udGV4dE9wZW5DTDo6RmlsbChjbF9tZW0gaW1hZ2UsIEludFNpemUgaW1hZ2VTaXplLCBD
b2xvciBjb2xvcikKK3sKKworICAgIGlmICghbV9GaWxsKSB7CisgICAgICAgIG1fRmlsbFByb2dy
YW0gPSBjb21waWxlUHJvZ3JhbShGaWxsS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVCht
X0ZpbGxQcm9ncmFtKTsKKyAgICAgICAgbV9GaWxsID0ga2VybmVsQnlOYW1lKG1fRmlsbFByb2dy
YW0sICJGaWxsIik7CisgICAgICAgIEFTU0VSVChtX0ZpbGwpOworICAgIH0KKworICAgIGZsb2F0
IHIsZyxiLGE7CisKKyAgICBjb2xvci5nZXRSR0JBKHIsZyxiLGEpOworCisgICAgUnVuS2VybmVs
IGtlcm5lbCh0aGlzLCBtX0ZpbGwsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0
KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChpbWFnZSk7CisgICAga2VybmVsLmFkZEFyZ3Vt
ZW50KHIpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChnKTsKKyAgICBrZXJuZWwuYWRkQXJndW1l
bnQoYik7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGEpOworICAgIGtlcm5lbC5ydW4oKTsKKwor
fQorCitjbF9tZW0gRmlsdGVyQ29udGV4dE9wZW5DTDo6dXBsb2FkQnVmZmVyKFdlYkNvcmU6OkZp
bHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQsIHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpCit7Cisg
ICAgY2xfaW50IGVycjsKKyAgICBjbF9tZW0gcmVzdWx0ID0gY2xDcmVhdGVCdWZmZXIoY29udGV4
dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9PTkxZLCBzaXplLCAwLCAmZXJyKTsKKyAg
ICBpZiAoZXJyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIE9wZW5DTFByaW50RXJyb3IoZXJyKTsK
KworICAgIGVyciA9IGNsRW5xdWV1ZVdyaXRlQnVmZmVyKGNvbnRleHQtPmNvbW1hbmRRdWV1ZSgp
LCByZXN1bHQsIENMX1RSVUUsIDAsIHNpemUsIGJ1ZmZlciwgMCwgMCwgMCk7CisgICAgaWYgKGVy
ciAhPSBDTF9TVUNDRVNTKQorICAgICAgICBPcGVuQ0xQcmludEVycm9yKGVycik7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitjbF9tZW0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y3JlYXRlT3Bl
bkNMSW1hZ2UoRmxvYXRTaXplIHBhaW50U2l6ZSkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNM
KiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgY2xfaW1h
Z2VfZm9ybWF0IGNsSW1hZ2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVs
X29yZGVyID0gQ0xfUkdCQTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90
eXBlID0gQ0xfVU5PUk1fSU5UODsKKworICAgIGNsX2ludCBlcjsKKyAgICBjbF9tZW0gaW1hZ2Ug
PSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9X
UklURSAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xJbWFnZUZvcm1hdCwgcGFpbnRT
aXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgMCwgMCwgJmVyKTsKKyAgICBpZiAoZXIg
IT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgY29udGV4dC0+T3BlbkNMUHJpbnRFcnJvcihlcik7Cisg
ICAgY29udGV4dC0+T3BlbkNMRGVidWdJbWFnZShpbWFnZSk7CisgICAgcmV0dXJuIGltYWdlOwor
fQorCit2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6Ok9wZW5DTFByaW50RXJyb3IoY2xfaW50IGVy
cm9yKQoreworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIENMX1NVQ0NFU1M6CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfU1VDQ0VTU1xuIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ0xfREVWSUNFX05PVF9GT1VORDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9E
RVZJQ0VfTk9UX0ZPVU5EXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9ERVZJQ0Vf
Tk9UX0FWQUlMQUJMRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9ERVZJQ0VfTk9UX0FW
QUlMQUJMRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfQ09NUElMRVJfTk9UX0FW
QUlMQUJMRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9DT01QSUxFUl9OT1RfQVZBSUxB
QkxFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9NRU1fT0JKRUNUX0FMTE9DQVRJ
T05fRkFJTFVSRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9NRU1fT0JKRUNUX0FMTE9D
QVRJT05fRkFJTFVSRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfT1VUX09GX1JF
U09VUkNFUzoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9PVVRfT0ZfUkVTT1VSQ0VTXG4i
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9PVVRfT0ZfSE9TVF9NRU1PUlk6CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfT1VUX09GX0hPU1RfTUVNT1JZXG4iKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDTF9QUk9GSUxJTkdfSU5GT19OT1RfQVZBSUxBQkxFOgorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNMX1BST0ZJTElOR19JTkZPX05PVF9BVkFJTEFCTEVcbiIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX01FTV9DT1BZX09WRVJMQVA6CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ0xfTUVNX0NPUFlfT1ZFUkxBUFxuIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ0xfSU1BR0VfRk9STUFUX01JU01BVENIOgorICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNMX0lNQUdFX0ZPUk1BVF9NSVNNQVRDSFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0xfSU1BR0VfRk9STUFUX05PVF9TVVBQT1JURUQ6CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ0xfSU1BR0VfRk9STUFUX05PVF9TVVBQT1JURURcbiIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENMX0JVSUxEX1BST0dSQU1fRkFJTFVSRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDTF9CVUlMRF9QUk9HUkFNX0ZBSUxVUkVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENMX01BUF9GQUlMVVJFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX01BUF9GQUlMVVJF
XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1ZBTFVFOgorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfVkFMVUVcbiIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENMX0lOVkFMSURfREVWSUNFX1RZUEU6CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ0xfSU5WQUxJRF9ERVZJQ0VfVFlQRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q0xfSU5WQUxJRF9QTEFURk9STToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElE
X1BMQVRGT1JNXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0RFVklD
RToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0RFVklDRVxuIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9DT05URVhUOgorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNMX0lOVkFMSURfQ09OVEVYVFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0xfSU5WQUxJRF9RVUVVRV9QUk9QRVJUSUVTOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNMX0lOVkFMSURfUVVFVUVfUFJPUEVSVElFU1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0xfSU5WQUxJRF9DT01NQU5EX1FVRVVFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNM
X0lOVkFMSURfQ09NTUFORF9RVUVVRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xf
SU5WQUxJRF9IT1NUX1BUUjoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0hP
U1RfUFRSXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX01FTV9PQkpF
Q1Q6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9NRU1fT0JKRUNUXG4iKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0lNQUdFX0ZPUk1BVF9ERVNDUklQ
VE9SOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfSU1BR0VfRk9STUFUX0RF
U0NSSVBUT1JcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfSU1BR0Vf
U0laRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0lNQUdFX1NJWkVcbiIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfU0FNUExFUjoKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1NBTVBMRVJcbiIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENMX0lOVkFMSURfQklOQVJZOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNM
X0lOVkFMSURfQklOQVJZXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElE
X0JVSUxEX09QVElPTlM6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9CVUlM
RF9PUFRJT05TXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1BST0dS
QU06CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9QUk9HUkFNXG4iKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX1BST0dSQU1fRVhFQ1VUQUJMRToKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX1BST0dSQU1fRVhFQ1VUQUJMRVxuIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9LRVJORUxfTkFNRToKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0tFUk5FTF9OQU1FXG4iKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0tFUk5FTF9ERUZJTklUSU9OOgorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfS0VSTkVMX0RFRklOSVRJT05cbiIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfS0VSTkVMOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNMX0lOVkFMSURfS0VSTkVMXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
TF9JTlZBTElEX0FSR19JTkRFWDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElE
X0FSR19JTkRFWFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9BUkdf
VkFMVUU6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9BUkdfVkFMVUVcbiIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfQVJHX1NJWkU6CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ0xfSU5WQUxJRF9BUkdfU0laRVxuIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ0xfSU5WQUxJRF9LRVJORUxfQVJHUzoKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDTF9JTlZBTElEX0tFUk5FTF9BUkdTXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDTF9JTlZBTElEX1dPUktfRElNRU5TSU9OOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNM
X0lOVkFMSURfV09SS19ESU1FTlNJT05cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENM
X0lOVkFMSURfV09SS19HUk9VUF9TSVpFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lO
VkFMSURfV09SS19HUk9VUF9TSVpFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9J
TlZBTElEX1dPUktfSVRFTV9TSVpFOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFM
SURfV09SS19JVEVNX1NJWkVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFM
SURfR0xPQkFMX09GRlNFVDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0dM
T0JBTF9PRkZTRVRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfRVZF
TlRfV0FJVF9MSVNUOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfRVZFTlRf
V0FJVF9MSVNUXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX0VWRU5U
OgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfRVZFTlRcbiIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENMX0lOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNMX0lOVkFMSURfT1BFUkFUSU9OXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDTF9JTlZBTElEX0dMX09CSkVDVDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9J
TlZBTElEX0dMX09CSkVDVFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJ
RF9CVUZGRVJfU0laRToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX0JVRkZF
Ul9TSVpFXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTF9JTlZBTElEX01JUF9MRVZF
TDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDTF9JTlZBTElEX01JUF9MRVZFTFxuIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xfSU5WQUxJRF9HTE9CQUxfV09SS19TSVpFOgorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNMX0lOVkFMSURfR0xPQkFMX1dPUktfU0laRVxuIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5r
bm93biBlcnJvciBjb2RlIDogJWRcbiIsIGVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6Ok9wZW5DTERlYnVnSW1hZ2UoY2xfbWVtIGlt
YWdlKQoreworICAgIHNpemVfdCB3aWR0aDsKKyAgICBzaXplX3QgaGVpZ2h0OworICAgIGNsX2lu
dCBlcnI7CisgICAgc2l6ZV90IGNoYW5uZWxTaXplOworCisgICAgZXJyID0gY2xHZXRJbWFnZUlu
Zm8oaW1hZ2UsIENMX0lNQUdFX1dJRFRILCBzaXplb2Yod2lkdGgpLCAmd2lkdGgsIE5VTEwpOwor
ICAgIGlmIChlcnIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgT3BlbkNMUHJpbnRFcnJvcihlcnIp
OworCisgICAgZXJyID0gY2xHZXRJbWFnZUluZm8oaW1hZ2UsIENMX0lNQUdFX0hFSUdIVCwgc2l6
ZW9mKGhlaWdodCksICZoZWlnaHQsIE5VTEwpOworICAgIGlmIChlcnIgIT0gQ0xfU1VDQ0VTUykK
KyAgICAgICAgT3BlbkNMUHJpbnRFcnJvcihlcnIpOworCisgICAgZXJyID0gY2xHZXRJbWFnZUlu
Zm8oaW1hZ2UsIENMX0lNQUdFX0VMRU1FTlRfU0laRSwgc2l6ZW9mKGNoYW5uZWxTaXplKSwgJmNo
YW5uZWxTaXplLCBOVUxMKTsKKyAgICBpZiAoZXJyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIE9w
ZW5DTFByaW50RXJyb3IoZXJyKTsKKyAgICBpZiAoZXJyICE9IENMX1NVQ0NFU1MpCisgICAgICAg
IHByaW50ZigiT3BlbkNMRGVidWdJbWFnZTogd2lkdGg6ICVsZCAgaGVpZ2h0OiAlbGQgY2hhbm5l
bFNpemU6ICVsZCBcbiIsIHdpZHRoLCBoZWlnaHQsIGNoYW5uZWxTaXplKTsKK30KKworCisKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTENvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTENvbnRl
eHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc2MDM0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVu
Q0wvT3BlbkNMQ29udGV4dC5oCkBAIC0wLDAgKzEsMTkzIEBACisjaWZuZGVmIE9wZW5DTENvbnRl
eHRfaAorI2RlZmluZSBPcGVuQ0xDb250ZXh0X2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lm
IEVOQUJMRShPUEVOQ0wpCisKKyNpbmNsdWRlICJDTC9jbC5oIgorI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmlsdGVyQ29udGV4dE9wZW5DTAoreworcHVibGljOgorICAgIC8vIFJldHVybnMgTlVMTCBpZiBp
bml0aWFsaXphdGlvbiBmYWlsZWQuCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNv
bnRleHQoKTsKKworICAgIGNsX2NvbnRleHQgZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2
aWNlQ29udGV4dDsgfQorICAgIGNsX2NvbW1hbmRfcXVldWUgY29tbWFuZFF1ZXVlKCkgeyByZXR1
cm4gbV9jb21tYW5kUXVldWU7IH0KKworICAgIGNsX21lbSBjcmVhdGVPcGVuQ0xJbWFnZShGbG9h
dFNpemUpOworCisgICAgc3RhdGljIGNsX21lbSB1cGxvYWRCdWZmZXIoV2ViQ29yZTo6RmlsdGVy
Q29udGV4dE9wZW5DTCogY29udGV4dCwgdm9pZCogYnVmZmVyLCBpbnQgc2l6ZSk7CisgICAgY2xf
bWVtIE9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UoY2xfbWVtLCBDb2xvclNwYWNlLCBDb2xvclNw
YWNlLCBJbnRSZWN0KTsKKyAgICB2b2lkIEZpbGwoY2xfbWVtLCBJbnRTaXplLCBDb2xvcik7CisK
KyAgICBpbmxpbmUgdm9pZCBjb21waWxlRkVDb21wb3NpdGUoKTsKKyAgICBpbmxpbmUgdm9pZCBj
b21waWxlRkVPZmZzZXQoKTsKKyAgICBpbmxpbmUgdm9pZCBjb21waWxlRkVCbGVuZCgpOworICAg
IGlubGluZSB2b2lkIGNvbXBpbGVGRUdhdXNzaWFuQmx1cigpOworICAgIGlubGluZSB2b2lkIGNv
bXBpbGVGRVR1cmJ1bGVuY2UoKTsKKyAgICBpbmxpbmUgdm9pZCBjb21waWxlRkVDb2xvck1hdHJp
eCgpOworICAgIGlubGluZSB2b2lkIGNvbXBpbGVGRUNvbnZvbHZlTWF0cml4KCk7CisgICAgaW5s
aW5lIHZvaWQgY29tcGlsZUZFQ29tcG9uZW50VHJhbnNmZXIoKTsKKyAgICBpbmxpbmUgdm9pZCBj
b21waWxlRkVNZXJnZSgpOworICAgIGlubGluZSB2b2lkIGNvbXBpbGVGRVRpbGUoKTsKKyAgICBp
bmxpbmUgdm9pZCBjb21waWxlRkVNb3JwaG9sb2d5KCk7CisKKyAgICBpbmxpbmUgdm9pZCBhcHBs
eUZFQ29sb3JNYXRyaXgoY2xfbWVtLCBJbnRTaXplLCBjbF9tZW0sIEZsb2F0UG9pbnQsIGNsX21l
bSwgaW50KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBseUZFQ29sb3JNYXRyaXhMdW1pbmFuY2VUb0Fs
cGhhKGNsX21lbSwgSW50U2l6ZSwgY2xfbWVtLCBGbG9hdFBvaW50LCBpbnQpOworICAgIGlubGlu
ZSB2b2lkIGFwcGx5RkVDb252b2x2ZU1hdHJpeChjbF9tZW0sIEludFNpemUsIGNsX21lbSwgSW50
U2l6ZSwgY2xfbWVtLCBpbnQsIGZsb2F0LCBmbG9hdCwgSW50UG9pbnQsIGJvb2wpOworICAgIGlu
bGluZSB2b2lkIGFwcGx5RkVUdXJidWxlbmNlKGNsX21lbSwgSW50U2l6ZSwgY2xfbWVtLCBjbF9t
ZW0sIGNsX21lbSwgY2xfbWVtLCBjbF9tZW0sIGNsX21lbSwgaW50LCBpbnQsIGludCwgaW50LCBm
bG9hdCwgZmxvYXQsIGJvb2wsIGludCwgaW50KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBseUZFQ29t
cG9zaXRlKGNsX21lbSwgSW50U2l6ZSwgY2xfbWVtLCBjbF9tZW0sIEZsb2F0UG9pbnQsIEZsb2F0
UG9pbnQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBpbnQpOworICAgIGlubGluZSB2b2lk
IGFwcGx5RkVDb21wb25lbnRUcmFuc2ZlcihjbF9tZW0sIEludFNpemUsIGNsX21lbSwgY2xfbWVt
LCBGbG9hdFBvaW50KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBseUZFT2Zmc2V0KGNsX21lbSwgSW50
U2l6ZSwgY2xfbWVtLCBGbG9hdFBvaW50KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBseUZFQmxlbmQo
Y2xfbWVtLCBJbnRTaXplLCBjbF9tZW0sIGNsX21lbSwgaW50LEZsb2F0UG9pbnQsIEZsb2F0UG9p
bnQpOworICAgIGlubGluZSB2b2lkIGFwcGx5RkVHYXVzc2lhbkJsdXIoY2xfbWVtLCBJbnRTaXpl
LCBjbF9tZW0pOworICAgIGlubGluZSB2b2lkIGFwcGx5RkVNZXJnZShjbF9tZW0sIEludFNpemUs
IGNsX21lbSwgRmxvYXRSZWN0KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBseUZFVGlsaW5nKGNsX21l
bSwgSW50U2l6ZSwgY2xfbWVtLCBGbG9hdFJlY3QsIEZsb2F0UG9pbnQpOworICAgIGlubGluZSB2
b2lkIGFwcGx5RkVUaWxlQnVpbGRlcihjbF9tZW0sIEZsb2F0UmVjdCwgY2xfbWVtLCBGbG9hdFNp
emUpOworICAgIGlubGluZSB2b2lkIGFwcGx5RkVNb3JwaG9sb2d5KGNsX21lbSwgSW50U2l6ZSwg
Y2xfbWVtLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisKKyAgICBzdGF0aWMgdm9pZCBPcGVu
Q0xQcmludEVycm9yKGNsX2ludCk7CisgICAgc3RhdGljIHZvaWQgT3BlbkNMRGVidWdJbWFnZShj
bF9tZW0pOworCitwcml2YXRlOgorCisgICAgY2xhc3MgUnVuS2VybmVsIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFJ1bktlcm5lbChGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0LCBjbF9rZXJu
ZWwga2VybmVsLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCisgICAgICAgICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgLCBtX2tlcm5lbChrZXJuZWwpCisgICAgICAg
ICAgICAsIGluZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVswXSA9
IHdpZHRoOworICAgICAgICAgICAgbV9nbG9iYWxTaXplWzFdID0gaGVpZ2h0OworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhZGRBcmd1bWVudChjbF9tZW0gaGFuZGxlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjbF9pbnQgZXJyOworICAgICAgICAgICAgZXJyID0gY2xTZXRLZXJuZWxBcmco
bV9rZXJuZWwsIGluZGV4KyssIHNpemVvZihjbF9tZW0pLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigmaGFuZGxlKSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IENMX1NVQ0NFU1MpeworICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+T3BlbkNMUHJpbnRFcnJvcihlcnIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRBcmd1bWVudChjbF9pbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNsX2ludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBjbFNl
dEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKGNsX2ludCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOworICAgICAgICAgICAgaWYgKGVyciAhPSBDTF9TVUNDRVNT
KXsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPk9wZW5DTFByaW50RXJyb3IoZXJyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfZmxv
YXQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsX2ludCBlcnI7CisgICAgICAgICAg
ICBlcnIgPSBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKGNsX2Zsb2F0
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZhbHVlKSk7CisgICAgICAgICAgICBpZiAoZXJy
ICE9IENMX1NVQ0NFU1MpeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+T3BlbkNMUHJpbnRF
cnJvcihlcnIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRB
cmd1bWVudChjbF9zYW1wbGVyIGhhbmRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2xfaW50
IGVycjsKKyAgICAgICAgICAgIGVyciA9IGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsr
LCBzaXplb2YoY2xfc2FtcGxlciksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZoYW5kbGUpKTsK
KyAgICAgICAgICAgIGlmIChlcnIgIT0gQ0xfU1VDQ0VTUyl7CisgICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5PcGVuQ0xQcmludEVycm9yKGVycik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHJ1bigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsRmluaXNoKG1f
Y29udGV4dC0+bV9jb21tYW5kUXVldWUpOworICAgICAgICAgICAgY2xFbnF1ZXVlTkRSYW5nZUtl
cm5lbChtX2NvbnRleHQtPm1fY29tbWFuZFF1ZXVlLCBtX2tlcm5lbCwgMiwgMCwgbV9nbG9iYWxT
aXplLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIG1fY29udGV4dDsKKyAgICAgICAgY2xfa2VybmVsIG1fa2VybmVsOworICAgICAgICBzaXpl
X3QgbV9nbG9iYWxTaXplWzJdOworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKworICAgIHN0
YXRpYyBjbF9wcm9ncmFtIGNvbXBpbGVQcm9ncmFtKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMg
aW5saW5lIGNsX2tlcm5lbCBrZXJuZWxCeU5hbWUoY2xfcHJvZ3JhbSBwcm9ncmFtLCBjb25zdCBj
aGFyKiBuYW1lKSB7IHJldHVybiBjbENyZWF0ZUtlcm5lbChwcm9ncmFtLCBuYW1lLCBOVUxMKTsg
fQorCisgICAgY2xfY29tbWFuZF9xdWV1ZSBtX2NvbW1hbmRRdWV1ZTsKKyAgICBjbF9kZXZpY2Vf
aWQgbV9kZXZpY2U7CisgICAgY2xfY29udGV4dCBtX2RldmljZUNvbnRleHQ7CisKKyAgICBjbF9w
cm9ncmFtIG1fT3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW07CisgICAgY2xfa2VybmVs
IG1fT3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZTsKKworICAgIGNsX3Byb2dyYW0gbV9GRUNvbG9y
TWF0cml4UHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV9GRU1hdHJpeDsKKyAgICBjbF9rZXJuZWwg
bV9GRVNhdHVyYXRlOworICAgIGNsX2tlcm5lbCBtX0ZFSHVlcm90YXRlOworICAgIGNsX2tlcm5l
bCBtX0ZFTHVtaW5hbmNlOworCisgICAgY2xfcHJvZ3JhbSBtX0ZFQ29udm9sdmVNYXRyaXhQcm9n
cmFtOworICAgIGNsX2tlcm5lbCBtX0ZFQ29udm9sdmVNYXRyaXg7CisgICAgY2xfa2VybmVsIG1f
RkVDb252b2x2ZU1hdHJpeEFscGhhOworCisgICAgY2xfcHJvZ3JhbSBtX0ZFVHVyYnVsZW5jZVBy
b2dyYW07CisgICAgY2xfa2VybmVsIG1fRkVUdXJidWxlbmNlOworCisgICAgY2xfcHJvZ3JhbSBt
X2ZlT2Zmc2V0UHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV9mZU9mZnNldDsKKworICAgIGNsX3By
b2dyYW0gbV9mZUJsZW5kUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV9mZU5vcm1hbEJsZW5kOwor
ICAgIGNsX2tlcm5lbCBtX2ZlTXVsdGlwbHlCbGVuZDsKKyAgICBjbF9rZXJuZWwgbV9mZVNjcmVl
bkJsZW5kOworICAgIGNsX2tlcm5lbCBtX2ZlRGFya2VuQmxlbmQ7CisgICAgY2xfa2VybmVsIG1f
ZmVMaWdodGVuQmxlbmQ7CisgICAgY2xfa2VybmVsIG1fZmVVbmtub3dCbGVuZDsKKworICAgIGNs
X3Byb2dyYW0gbV9mZUdhdXNzaWFuQmx1clByb2dyYW07CisgICAgY2xfa2VybmVsIG1fZmVHYXVz
c2lhbkJsdXI7CisKKyAgICBjbF9wcm9ncmFtIG1fRkVGbG9vZFByb2dyYW07CisgICAgY2xfa2Vy
bmVsIG1fRkVGbG9vZDsKKworICAgIGNsX3Byb2dyYW0gbV9mZUNvbXBvc2l0ZVByb2dyYW07Cisg
ICAgY2xfa2VybmVsIG1fZmVBcml0aG1ldGljOworICAgIGNsX2tlcm5lbCBtX2ZlQXRvcDsKKyAg
ICBjbF9rZXJuZWwgbV9mZUluOworICAgIGNsX2tlcm5lbCBtX2ZlT3V0OworICAgIGNsX2tlcm5l
bCBtX2ZlT3ZlcjsKKyAgICBjbF9rZXJuZWwgbV9mZVhvcjsKKworICAgIGNsX3Byb2dyYW0gbV9G
RU1lcmdlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV9GRU1lcmdlOworCisgICAgY2xfcHJvZ3Jh
bSBtX2ZlVGlsZVByb2dyYW07CisgICAgY2xfa2VybmVsIG1fZmVUaWxlOworICAgIGNsX2tlcm5l
bCBtX1RpbGVCdWlsZGVyOworCisgICAgY2xfcHJvZ3JhbSBtX2ZlTW9ycGhvbG9neVByb2dyYW07
CisgICAgY2xfa2VybmVsIG1fZmVNb3JwaG9sb2d5RGlsYXRlOworICAgIGNsX2tlcm5lbCBtX2Zl
TW9ycGhvbG9neUVyb2RlOworCisgICAgY2xfcHJvZ3JhbSBtX0ZpbGxQcm9ncmFtOworICAgIGNs
X2tlcm5lbCBtX0ZpbGw7CisKKyAgICBjbF9wcm9ncmFtIG1fZmVDb21wb25lbnRUcmFuc2ZlclBy
b2dyYW07CisgICAgY2xfa2VybmVsIG1fZmVDb21wb25lbnRUcmFuc2ZlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVu
Q0wvT3BlbkNMRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUJsZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zNzc2MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVCbGVuZC5jcHAKQEAgLTAsMCAr
MSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBp
bmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykg
JiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRUJsZW5kLmgiCisjaW5jbHVkZSAiT3BlbkNM
Q29udGV4dC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBQUk9HUkFNX1NUUihT
cmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogRkVCbGVuZEtlcm5lbFByb2dyYW0g
PQorUFJPR1JBTV9TVFIoCisgICAgICAgICAgICBjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENM
S19OT1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QIHwgQ0xLX0ZJTFRF
Ul9ORUFSRVNUOworCisgICAgICAgICAgICBfX2tlcm5lbCB2b2lkIE5vcm1hbEJsZW5kKF9fd3Jp
dGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlBLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgeUIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhB
LCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEpOworICAgICAgICAgICAgICAgICAgICBpbnQyIHNvdXJj
ZUNvb3JkQiA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhCLCBnZXRfZ2xvYmFsX2lkKDEp
ICsgeUIpOworICAgICAgICAgICAgICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9p
bWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmRBKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNv
dXJjZUNvb3JkQik7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVs
ID0gKGZsb2F0NCkoKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi54ICsgc291
cmNlUGl4ZWxBLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi55ICsgc291
cmNlUGl4ZWxBLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqIHNvdXJjZVBpeGVsQi56ICsgc291
cmNlUGl4ZWxBLnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEuMCAtICgxLjAgLSBzb3VyY2VQaXhlbEEudykgKiAoMS4wIC0gc291cmNl
UGl4ZWxCLncpKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9u
LCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9u
UGl4ZWwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX19rZXJuZWwgdm9pZCBN
dWx0aXBseUJsZW5kKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNv
dXJjZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29u
bHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgeEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgeUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
eEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUIpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQSA9
IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhBLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQiA9IChpbnQyKSAoZ2V0X2dsb2Jh
bF9pZCgwKSArIHhCLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUIpOworICAgICAgICAgICAgICAgICAg
ICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291
cmNlQ29vcmRBKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJl
YWRfaW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQik7CisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVsID0gKGZsb2F0NCkoKDEuMCAtIHNvdXJjZVBp
eGVsQS53KSAqIHNvdXJjZVBpeGVsQi54ICsgKDEuMCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJj
ZVBpeGVsQS54ICsgc291cmNlUGl4ZWxBLnggKiBzb3VyY2VQaXhlbEIueCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4wIC0gc291cmNl
UGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnkgKyAoMS4wIC0gc291cmNlUGl4ZWxCLncpICogc291
cmNlUGl4ZWxBLnkgKyBzb3VyY2VQaXhlbEEueSAqIHNvdXJjZVBpeGVsQi55LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLjAgLSBzb3Vy
Y2VQaXhlbEEudykgKiBzb3VyY2VQaXhlbEIueiArICgxLjAgLSBzb3VyY2VQaXhlbEIudykgKiBz
b3VyY2VQaXhlbEEueiArIHNvdXJjZVBpeGVsQS56ICogc291cmNlUGl4ZWxCLnosCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCAtICgx
LjAgLSBzb3VyY2VQaXhlbEEudykgKiAoMS4wIC0gc291cmNlUGl4ZWxCLncpKTsKKyAgICAgICAg
ICAgICAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9p
ZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgX19rZXJuZWwgdm9pZCBTY3JlZW5CbGVuZChfX3dyaXRlX29u
bHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhBLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5QSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHlCKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QSwgZ2V0
X2dsb2JhbF9pZCgxKSArIHlBKTsKKyAgICAgICAgICAgICAgICAgICAgaW50MiBzb3VyY2VDb29y
ZEIgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlC
KTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2Vm
KHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQSk7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VD
b29yZEIpOworICAgICAgICAgICAgICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChm
bG9hdDQpKHNvdXJjZVBpeGVsQi54ICsgc291cmNlUGl4ZWxBLnggLSBzb3VyY2VQaXhlbEEueCAq
IHNvdXJjZVBpeGVsQi54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQi55ICsgc291cmNlUGl4ZWxBLnkgLSBzb3VyY2VQ
aXhlbEEueSAqIHNvdXJjZVBpeGVsQi55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQi56ICsgc291cmNlUGl4ZWxBLnog
LSBzb3VyY2VQaXhlbEEueiAqIHNvdXJjZVBpeGVsQi56LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCAtICgxLjAgLSBzb3VyY2VQaXhl
bEEudykgKiAoMS4wIC0gc291cmNlUGl4ZWxCLncpKTsKKyAgICAgICAgICAgICAgICAgICAgd3Jp
dGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2Jh
bF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgX19rZXJuZWwgdm9pZCBEYXJrZW5CbGVuZChfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRl
c3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRf
b25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHhBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCB5QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHlCKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50MiBzb3VyY2VD
b29yZEEgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QSwgZ2V0X2dsb2JhbF9pZCgxKSAr
IHlBKTsKKyAgICAgICAgICAgICAgICAgICAgaW50MiBzb3VyY2VDb29yZEIgPSAoaW50MikgKGdl
dF9nbG9iYWxfaWQoMCkgKyB4QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlCKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBs
ZXIsIHNvdXJjZUNvb3JkQSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhl
bEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VDb29yZEIpOworICAgICAg
ICAgICAgICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKG1pbigoMS4w
IC0gc291cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnggKyBzb3VyY2VQaXhlbEEueCwgKDEu
MCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS54ICsgc291cmNlUGl4ZWxCLngpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1p
bigoMS4wIC0gc291cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnkgKyBzb3VyY2VQaXhlbEEu
eSwgKDEuMCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS55ICsgc291cmNlUGl4ZWxC
LnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1pbigoMS4wIC0gc291cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnogKyBzb3VyY2VQ
aXhlbEEueiwgKDEuMCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS56ICsgc291cmNl
UGl4ZWxCLnopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMS4wIC0gKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqICgxLjAgLSBzb3Vy
Y2VQaXhlbEIudykpOworICAgICAgICAgICAgICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRp
b24sIChpbnQyKShnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRp
b25QaXhlbCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfX2tlcm5lbCB2b2lk
IExpZ2h0ZW5CbGVuZChfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNv
dXJjZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25s
eSBpbWFnZTJkX3Qgc291cmNlQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHhBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgeUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlCKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50
MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QSwgZ2V0X2dsb2JhbF9pZCgxKSArIHlBKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50MiBzb3VyY2VDb29yZEIgPSAoaW50MikgKGdldF9nbG9iYWxfaWQo
MCkgKyB4QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlCKTsKKyAgICAgICAgICAgICAgICAgICAgZmxv
YXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNv
b3JkQSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2lt
YWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VDb29yZEIpOworICAgICAgICAgICAgICAgICAg
ICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpKG1heCgoMS4wIC0gc291cmNlUGl4
ZWxBLncpICogc291cmNlUGl4ZWxCLnggKyBzb3VyY2VQaXhlbEEueCwgKDEuMCAtIHNvdXJjZVBp
eGVsQi53KSAqIHNvdXJjZVBpeGVsQS54ICsgc291cmNlUGl4ZWxCLngpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgoMS4wIC0gc291
cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnkgKyBzb3VyY2VQaXhlbEEueSwgKDEuMCAtIHNv
dXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS55ICsgc291cmNlUGl4ZWxCLnkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgoMS4w
IC0gc291cmNlUGl4ZWxBLncpICogc291cmNlUGl4ZWxCLnogKyBzb3VyY2VQaXhlbEEueiwgKDEu
MCAtIHNvdXJjZVBpeGVsQi53KSAqIHNvdXJjZVBpeGVsQS56ICsgc291cmNlUGl4ZWxCLnopLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMS4wIC0gKDEuMCAtIHNvdXJjZVBpeGVsQS53KSAqICgxLjAgLSBzb3VyY2VQaXhlbEIudykp
OworICAgICAgICAgICAgICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShn
ZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfX2tlcm5lbCB2b2lkIFVua25vd0JsZW5k
KF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291
cmNlQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlBLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQyIHNvdXJjZUNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDAp
LCBnZXRfZ2xvYmFsX2lkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQ0IGRlc3RpbmF0
aW9uUGl4ZWwgPSAoZmxvYXQ0KSgwLjAsMC4wLDAuMCwwLjApOworICAgICAgICAgICAgICAgICAg
ICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShnZXRfZ2xvYmFsX2lkKDApLCBnZXRf
Z2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7CisgICAgICAgICAgICAgICAgfQorKTsK
KworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFQmxlbmQoKQorewor
ICAgIGlmICghbV9mZU5vcm1hbEJsZW5kKSB7CisgICAgICAgIG1fZmVCbGVuZFByb2dyYW0gPSBj
b21waWxlUHJvZ3JhbShGRUJsZW5kS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX2Zl
QmxlbmRQcm9ncmFtKTsKKworICAgICAgICBtX2ZlTm9ybWFsQmxlbmQgPSBrZXJuZWxCeU5hbWUo
bV9mZUJsZW5kUHJvZ3JhbSwgIk5vcm1hbEJsZW5kIik7CisgICAgICAgIEFTU0VSVChtX2ZlTm9y
bWFsQmxlbmQpOworICAgICAgICBtX2ZlTXVsdGlwbHlCbGVuZCA9IGtlcm5lbEJ5TmFtZShtX2Zl
QmxlbmRQcm9ncmFtLCAiTXVsdGlwbHlCbGVuZCIpOworICAgICAgICBBU1NFUlQobV9mZU5vcm1h
bEJsZW5kKTsKKyAgICAgICAgbV9mZVNjcmVlbkJsZW5kID0ga2VybmVsQnlOYW1lKG1fZmVCbGVu
ZFByb2dyYW0sICJTY3JlZW5CbGVuZCIpOworICAgICAgICBBU1NFUlQobV9mZU5vcm1hbEJsZW5k
KTsKKyAgICAgICAgbV9mZURhcmtlbkJsZW5kID0ga2VybmVsQnlOYW1lKG1fZmVCbGVuZFByb2dy
YW0sICJEYXJrZW5CbGVuZCIpOworICAgICAgICBBU1NFUlQobV9mZU5vcm1hbEJsZW5kKTsKKyAg
ICAgICAgbV9mZUxpZ2h0ZW5CbGVuZCA9IGtlcm5lbEJ5TmFtZShtX2ZlQmxlbmRQcm9ncmFtLCAi
TGlnaHRlbkJsZW5kIik7CisgICAgICAgIEFTU0VSVChtX2ZlTm9ybWFsQmxlbmQpOworICAgICAg
ICBtX2ZlVW5rbm93QmxlbmQgPSBrZXJuZWxCeU5hbWUobV9mZUJsZW5kUHJvZ3JhbSwgIlVua25v
d0JsZW5kIik7CisgICAgICAgIEFTU0VSVChtX2ZlTm9ybWFsQmxlbmQpOworICAgIH0KK30KKwor
aW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRUJsZW5kKGNsX21lbSBkZXN0
aW5hdGlvbiwgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsIGNsX21lbSBzb3VyY2VBLCBjbF9tZW0g
c291cmNlQiwgaW50IG1vZGUsIEZsb2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEsIEZs
b2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIpCit7CisgICAgY2xfa2VybmVsIGJsZW5k
TW9kZTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgRkVCTEVORF9NT0RFX05PUk1B
TDoKKyAgICAgICAgYmxlbmRNb2RlID0gbV9mZU5vcm1hbEJsZW5kOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFQkxFTkRfTU9ERV9NVUxUSVBMWToKKyAgICAgICAgYmxlbmRNb2RlID0gbV9m
ZU11bHRpcGx5QmxlbmQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVCTEVORF9NT0RFX1ND
UkVFTjoKKyAgICAgICAgYmxlbmRNb2RlID0gbV9mZVNjcmVlbkJsZW5kOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZFQkxFTkRfTU9ERV9EQVJLRU46CisgICAgICAgIGJsZW5kTW9kZSA9IG1f
ZmVEYXJrZW5CbGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfTElH
SFRFTjoKKyAgICAgICAgYmxlbmRNb2RlID0gbV9mZUxpZ2h0ZW5CbGVuZDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfVU5LTk9XTjoKKyAgICBkZWZhdWx0OgorICAgICAg
ICBibGVuZE1vZGUgPSBtX2ZlVW5rbm93QmxlbmQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGZsb2F0IHhBID0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEueCgpOworICAgIGZsb2F0IHlB
ID0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEueSgpOworCisgICAgZmxvYXQgeEIgPSByZWxhdGl2
ZVNvdXJjZUxvY2F0aW9uQi54KCk7CisgICAgZmxvYXQgeUIgPSByZWxhdGl2ZVNvdXJjZUxvY2F0
aW9uQi55KCk7CisKKyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIGJsZW5kTW9kZSwgZGVzdGlu
YXRpb25TaXplLndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVs
LmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNl
QSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUIpOworICAgIGtlcm5lbC5hZGRBcmd1
bWVudCh4QSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHlBKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoeEIpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudCh5Qik7CisgICAga2VybmVsLnJ1bigp
OworfQorCitib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRl
ckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7
CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnRl
eHQtPmNvbXBpbGVGRUJsZW5kKCk7CisKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKworICAgIEZs
b2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCku
bG9jYXRpb24oKSk7CisgICAgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEuc2V0WChhYnNvbHV0ZVBh
aW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlTG9jYXRpb25BLngoKSk7CisgICAgcmVsYXRp
dmVTb3VyY2VMb2NhdGlvbkEuc2V0WShhYnNvbHV0ZVBhaW50UmVjdCgpLnkoKSAtIHJlbGF0aXZl
U291cmNlTG9jYXRpb25BLnkoKSk7CisKKyAgICBGbG9hdFBvaW50IHJlbGF0aXZlU291cmNlTG9j
YXRpb25CKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICByZWxhdGl2
ZVNvdXJjZUxvY2F0aW9uQi5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVsYXRpdmVT
b3VyY2VMb2NhdGlvbkIueCgpKTsKKyAgICByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQi5zZXRZKGFi
c29sdXRlUGFpbnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIueSgpKTsKKwor
ICAgIGNsX21lbSBzb3VyY2VBID0gaW4tPmFzT3BlbkNMSW1hZ2UoKTsKKyAgICBjbF9tZW0gc291
cmNlQiA9IGluMi0+YXNPcGVuQ0xJbWFnZSgpOworICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNy
ZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7CisKKyAgICBjb250ZXh0LT5hcHBseUZFQmxlbmQoZGVz
dGluYXRpb24sIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpLCBzb3VyY2VBLCBzb3VyY2VCLCBt
X21vZGUsIHJlbGF0aXZlU291cmNlTG9jYXRpb25BLCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQik7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3Bl
bkNML09wZW5DTEZFQ29sb3JNYXRyaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRhYzZjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcApAQCAtMCww
ICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5l
QGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxURVJT
KSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRl
ICJPcGVuQ0xDb250ZXh0LmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKworI2RlZmluZSBQUk9HUkFN
X1NUUihTcmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogRkVDb2xvck1hdHJpeEtl
cm5lbFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCisgICAgY29uc3Qgc2FtcGxlcl90IHNhbXBsZXIg
PSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfCBDTEtfQUREUkVTU19DTEFNUCB8IENMS19G
SUxURVJfTkVBUkVTVDsKKyAgICBfX2NvbnN0YW50IGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3
OTMyMzg0NjsKKworICAgIF9fa2VybmVsIHZvaWQgTWF0cml4KF9fd3JpdGVfb25seSBpbWFnZTJk
X3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1h
Z2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdGFudCBmbG9hdCAqdmFsdWVzKQorICAgIHsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZCA9
IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KTsKKyAg
ICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBz
b3VyY2VDb29yZCk7CisKKyAgICAgICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxvYXQ0
KSh2YWx1ZXNbMF0gICogc291cmNlUGl4ZWwueCArIHZhbHVlc1sxXSAgKiBzb3VyY2VQaXhlbC55
ICsgdmFsdWVzWzJdICAqIHNvdXJjZVBpeGVsLnogKyB2YWx1ZXNbM10gICogc291cmNlUGl4ZWwu
dyArIHZhbHVlc1s0XSAqIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlc1s1XSAgKiBzb3VyY2VQaXhlbC54ICsgdmFsdWVzWzZdICAqIHNvdXJj
ZVBpeGVsLnkgKyB2YWx1ZXNbN10gICogc291cmNlUGl4ZWwueiArIHZhbHVlc1s4XSAgKiBzb3Vy
Y2VQaXhlbC53ICsgdmFsdWVzWzldICogMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVzWzEwXSAqIHNvdXJjZVBpeGVsLnggKyB2YWx1ZXNbMTFd
ICogc291cmNlUGl4ZWwueSArIHZhbHVlc1sxMl0gKiBzb3VyY2VQaXhlbC56ICsgdmFsdWVzWzEz
XSAqIHNvdXJjZVBpeGVsLncgKyB2YWx1ZXNbMTRdICogMjU1LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWzE1XSAqIHNvdXJjZVBpeGVsLnggKyB2
YWx1ZXNbMTZdICogc291cmNlUGl4ZWwueSArIHZhbHVlc1sxN10gKiBzb3VyY2VQaXhlbC56ICsg
dmFsdWVzWzE4XSAqIHNvdXJjZVBpeGVsLncgKyB2YWx1ZXNbMTldICogMjU1KTsKKworICAgICAg
ICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShnZXRfZ2xvYmFsX2lkKDApLCBnZXRf
Z2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7CisgICAgfQorCisKKyAgICBfX2tlcm5l
bCB2b2lkIFNhdHVyYXRlKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdGFudCBmbG9hdCAqdmFsdWVz
KQorICAgIHsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9p
ZCgwKSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBp
eGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7CisKKyAgICAg
ICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxvYXQ0KSgoMC4yMTMgKyAwLjc4NyAqIHZh
bHVlc1swXSkgKiBzb3VyY2VQaXhlbC54ICsgKDAuNzE1IC0gMC43MTUgKiB2YWx1ZXNbMF0pICog
c291cmNlUGl4ZWwueSArICgwLjA3MiAtIDAuMDcyICogdmFsdWVzWzBdKSAqIHNvdXJjZVBpeGVs
LnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0g
MC4yMTMgKiB2YWx1ZXNbMF0pICogc291cmNlUGl4ZWwueCArICgwLjcxNSArIDAuMjg1ICogdmFs
dWVzWzBdKSAqIHNvdXJjZVBpeGVsLnkgKyAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlc1swXSkgKiBz
b3VyY2VQaXhlbC56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgwLjIxMyAtIDAuMjEzICogdmFsdWVzWzBdKSAqIHNvdXJjZVBpeGVsLnggKyAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlc1swXSkgKiBzb3VyY2VQaXhlbC55ICsgKDAuMDcyICsgMC45MjggKiB2YWx1
ZXNbMF0pICogc291cmNlUGl4ZWwueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VQaXhlbC53KTsKKworICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGlu
YXRpb24sIChpbnQyKShnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGlu
YXRpb25QaXhlbCk7CisgICAgfQorCisgICAgX19rZXJuZWwgdm9pZCBIdWVyb3RhdGUoX193cml0
ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBf
X3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0YW50IGZsb2F0ICp2YWx1ZXMpCisgICAgeworICAgICAgICBpbnQy
IHNvdXJjZUNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeCwgZ2V0X2dsb2JhbF9p
ZCgxKSArIHkpOworICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWwgPSByZWFkX2ltYWdlZihzb3Vy
Y2UsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKKworICAgICAgICBmbG9hdCBjb3NIdWUgPSBjb3Mo
dmFsdWVzWzBdICogcGkgLyAxODApOworICAgICAgICBmbG9hdCBzaW5IdWUgPSBzaW4odmFsdWVz
WzBdICogcGkgLyAxODApOworCisgICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVsID0gKGZs
b2F0NCkoc291cmNlUGl4ZWwueCAqICgwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVlICog
MC4yMTMpICsgc291cmNlUGl4ZWwueSAqICgwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVl
ICogMC43MTUpICsgc291cmNlUGl4ZWwueiAgKiAoMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiArIHNp
bkh1ZSAqIDAuOTI4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbC54ICogKDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0
MykgKyBzb3VyY2VQaXhlbC55ICogKDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAw
LjE0MCkgKyBzb3VyY2VQaXhlbC56ICAqICgwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVl
ICogMC4yODMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZVBpeGVsLnggKiAoMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1ZSAqIDAuNzg3KSAr
IHNvdXJjZVBpeGVsLnkgKiAoMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1
KSArIHNvdXJjZVBpeGVsLnogICogKDAuMDcyICsgY29zSHVlICogMC45MjggKyBzaW5IdWUgKiAw
LjA3MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
UGl4ZWwudyk7CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0
X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAg
IH0KKworICAgIF9fa2VybmVsIHZvaWQgTHVtaW5hbmNlKF9fd3JpdGVfb25seSBpbWFnZTJkX3Qg
ZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2Uy
ZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHkpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3Jk
ID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeCwgZ2V0X2dsb2JhbF9pZCgxKSArIHkpOwor
ICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIs
IHNvdXJjZUNvb3JkKTsKKworICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9h
dDQpKDAsIDAsIDAsIDAuMjEyNSAqIHNvdXJjZVBpeGVsLnggKyAwLjcxNTQgKiBzb3VyY2VQaXhl
bC55ICsgMC4wNzIxICogc291cmNlUGl4ZWwueik7CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRl
c3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIHNv
dXJjZVBpeGVsKTsKKyAgICB9CisKKworKTsKKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29tcGlsZUZFQ29sb3JNYXRyaXgoKQoreworICAgIGlmICghbV9GRUNvbG9yTWF0cml4
UHJvZ3JhbSkgeworICAgICAgICBtX0ZFQ29sb3JNYXRyaXhQcm9ncmFtID0gY29tcGlsZVByb2dy
YW0oRkVDb2xvck1hdHJpeEtlcm5lbFByb2dyYW0pOworICAgICAgICBBU1NFUlQobV9GRUNvbG9y
TWF0cml4UHJvZ3JhbSk7CisKKyAgICAgICAgbV9GRU1hdHJpeCA9IGtlcm5lbEJ5TmFtZShtX0ZF
Q29sb3JNYXRyaXhQcm9ncmFtLCAiTWF0cml4Iik7CisgICAgICAgIEFTU0VSVChtX0ZFTWF0cml4
KTsKKyAgICAgICAgbV9GRVNhdHVyYXRlID0ga2VybmVsQnlOYW1lKG1fRkVDb2xvck1hdHJpeFBy
b2dyYW0sICJTYXR1cmF0ZSIpOworICAgICAgICBBU1NFUlQobV9GRVNhdHVyYXRlKTsKKyAgICAg
ICAgbV9GRUh1ZXJvdGF0ZSA9IGtlcm5lbEJ5TmFtZShtX0ZFQ29sb3JNYXRyaXhQcm9ncmFtLCAi
SHVlcm90YXRlIik7CisgICAgICAgIEFTU0VSVChtX0ZFSHVlcm90YXRlKTsKKyAgICAgICAgbV9G
RUx1bWluYW5jZSA9IGtlcm5lbEJ5TmFtZShtX0ZFQ29sb3JNYXRyaXhQcm9ncmFtLCAiTHVtaW5h
bmNlIik7CisgICAgICAgIEFTU0VSVChtX0ZFTHVtaW5hbmNlKTsKKyAgICB9Cit9CisKK2lubGlu
ZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVDb2xvck1hdHJpeChjbF9tZW0gZGVz
dGluYXRpb24sIEludFNpemUgZGVzdGluYXRpb25TaXplLCBjbF9tZW0gc291cmNlLCBGbG9hdFBv
aW50IHJlbGF0aXZlU291cmNlTG9jYXRpb24sIGNsX21lbSB2YWx1ZXMsIGludCB0eXBlKQorewor
ICAgIGZsb2F0IHggPSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLngoKTsKKyAgICBmbG9hdCB5ID0g
cmVsYXRpdmVTb3VyY2VMb2NhdGlvbi55KCk7CisKKyAgICBjbF9rZXJuZWwgbV9GRUNvbG9yTWF0
cml4OworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOgorICAgICAgICBtX0ZFQ29sb3JNYXRyaXggPSBtX0ZFTWF0cml4OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgbV9G
RUNvbG9yTWF0cml4ID0gbV9GRVNhdHVyYXRlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIG1fRkVDb2xvck1hdHJpeCA9IG1f
RkVIdWVyb3RhdGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIG1fRkVDb2xvck1hdHJpeCA9IG1fRkVMdW1pbmFu
Y2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fRkVDb2xvck1hdHJp
eCA9IDA7CisgICAgfQorCisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX0ZFQ29sb3JNYXRy
aXgsIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFyZ3Vt
ZW50KHNvdXJjZSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHgpOworICAgIGtlcm5lbC5hZGRB
cmd1bWVudCh5KTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQodmFsdWVzKTsKKyAgICBrZXJuZWwu
cnVuKCk7CisKK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRUNv
bG9yTWF0cml4THVtaW5hbmNlVG9BbHBoYShjbF9tZW0gZGVzdGluYXRpb24sIEludFNpemUgZGVz
dGluYXRpb25TaXplLCBjbF9tZW0gc291cmNlLCBGbG9hdFBvaW50IHJlbGF0aXZlU291cmNlTG9j
YXRpb24sIGludCBtX3R5cGUpCit7CisgICAgZmxvYXQgeCA9IHJlbGF0aXZlU291cmNlTG9jYXRp
b24ueCgpOworICAgIGZsb2F0IHkgPSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLnkoKTsKKworICAg
IFJ1bktlcm5lbCBrZXJuZWwodGhpcywgbV9GRUx1bWluYW5jZSwgZGVzdGluYXRpb25TaXplLndp
ZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50
KGRlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNlKTsKKyAgICBrZXJu
ZWwuYWRkQXJndW1lbnQoeCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHkpOworICAgIGtlcm5l
bC5ydW4oKTsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkK
K3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5D
TDo6Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb250ZXh0LT5jb21waWxlRkVDb2xvck1hdHJpeCgpOworCisgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGNsX21lbSBzb3VyY2UgPSBpbi0+YXNPcGVu
Q0xJbWFnZSgpOworICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVz
dWx0KCk7CisgICAgY2xfbWVtIGNsVmFsdWVzID0gMDsKKworICAgIGlmKG1fdHlwZSAhPSBGRUNP
TE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQSkKKyAgICAgICAgY2xWYWx1ZXMgPSBjb250
ZXh0LT51cGxvYWRCdWZmZXIoY29udGV4dCwgbV92YWx1ZXMuZGF0YSgpLCBzaXplb2YoZmxvYXQp
ICogMjApOworCisgICAgRmxvYXRQb2ludCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworICAgIHJlbGF0aXZlU291cmNlTG9jYXRpb24u
c2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlTG9jYXRpb24ueCgp
KTsKKyAgICByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55
KCkgLSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLnkoKSk7CisKKyAgICBpZihtX3R5cGUgIT0gRkVD
T0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEEpCisgICAgICAgIGNvbnRleHQtPmFwcGx5
RkVDb2xvck1hdHJpeChkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNv
dXJjZSwgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbiwgY2xWYWx1ZXMsIG1fdHlwZSk7CisgICAgZWxz
ZQorICAgICAgICBjb250ZXh0LT5hcHBseUZFQ29sb3JNYXRyaXhMdW1pbmFuY2VUb0FscGhhKGRl
c3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlLCByZWxhdGl2ZVNv
dXJjZUxvY2F0aW9uLCBtX3R5cGUpOworCisgICAgY2xSZWxlYXNlTWVtT2JqZWN0KGNsVmFsdWVz
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVD
b21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9P
cGVuQ0wvT3BlbkNMRkVDb21wb3NpdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmU1YjFhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUNvbXBvc2l0ZS5jcHAKQEAgLTAsMCAr
MSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBp
bmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykg
JiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgorI2luY2x1ZGUgIk9w
ZW5DTENvbnRleHQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgUFJPR1JBTV9T
VFIoU3JjKSAjU3JjCisjZGVmaW5lIFBST0dSQU0oU3JjKSBQUk9HUkFNX1NUUihTcmMpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIEZFQ29tcG9zaXRlS2VybmVs
UHJvZ3JhbSA9CitQUk9HUkFNX1NUUigKKyAgICBjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENM
S19OT1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QIHwgQ0xLX0ZJTFRF
Ul9ORUFSRVNUOworCisgICAgX19rZXJuZWwgdm9pZCBBcml0aG1ldGljKF9fd3JpdGVfb25seSBp
bWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29u
bHkgaW1hZ2UyZF90IHNvdXJjZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29u
bHkgaW1hZ2UyZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgazEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgazIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgazMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgazQpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3Jk
QSA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhBLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUEp
OworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQiA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSAr
IHhCLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUIpOworICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxB
ID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmRBKTsKKyAgICAgICAg
ZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJj
ZUNvb3JkQik7CisgICAgICAgIHNvdXJjZVBpeGVsQS54eXogKj0gc291cmNlUGl4ZWxBLnc7Cisg
ICAgICAgIHNvdXJjZVBpeGVsQi54eXogKj0gc291cmNlUGl4ZWxCLnc7CisKKyAgICAgICAgZmxv
YXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxvYXQ0KShrMSAqIHNvdXJjZVBpeGVsQS54ICogc291
cmNlUGl4ZWxCLnggKyBrMiAqIHNvdXJjZVBpeGVsQS54ICsgazMgKiBzb3VyY2VQaXhlbEIueCAr
IGs0ICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSAqIHNv
dXJjZVBpeGVsQS55ICogc291cmNlUGl4ZWxCLnkgKyBrMiAqIHNvdXJjZVBpeGVsQS55ICsgazMg
KiBzb3VyY2VQaXhlbEIueSArIGs0ICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrMSAqIHNvdXJjZVBpeGVsQS56ICogc291cmNlUGl4ZWxCLnogKyBrMiAqIHNv
dXJjZVBpeGVsQS56ICsgazMgKiBzb3VyY2VQaXhlbEIueiArIGs0ICwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSAqIHNvdXJjZVBpeGVsQS53ICogc291cmNl
UGl4ZWxCLncgKyBrMiAqIHNvdXJjZVBpeGVsQS53ICsgazMgKiBzb3VyY2VQaXhlbEIudyArIGs0
KTsKKworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLncgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVs
LncsIDAuMCwgMS4wKTsKKyAgICAgICAgZmxvYXQgcmVjID0gMSAvIGRlc3RpbmF0aW9uUGl4ZWwu
dzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC54ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC54
LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueSA9IGNsYW1wKGRl
c3RpbmF0aW9uUGl4ZWwueSwgMC4wLCAxLjApICogcmVjOworICAgICAgICBkZXN0aW5hdGlvblBp
eGVsLnogPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnosIDAuMCwgMS4wKSAqIHJlYzsKKworICAg
ICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwg
Z2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgIH0KKworICAgIF9fa2Vy
bmVsIHZvaWQgT3ZlcihfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VCLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHhBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHlBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHhCLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHlCKQorICAgIHsKKyAgICAgICAgaW50MiBzb3VyY2VDb29yZEEg
PSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4QSwgZ2V0X2dsb2JhbF9pZCgxKSArIHlBKTsK
KyAgICAgICAgaW50MiBzb3VyY2VDb29yZEIgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkgKyB4
QiwgZ2V0X2dsb2JhbF9pZCgxKSArIHlCKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9
IHJlYWRfaW1hZ2VmKHNvdXJjZUEsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQSk7CisgICAgICAgIGZs
b2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VD
b29yZEIpOworICAgICAgICBzb3VyY2VQaXhlbEEueHl6ICo9IHNvdXJjZVBpeGVsQS53OworICAg
ICAgICBzb3VyY2VQaXhlbEIueHl6ICo9IHNvdXJjZVBpeGVsQi53OworCisgICAgICAgIGZsb2F0
NCBkZXN0aW5hdGlvblBpeGVsID0gKGZsb2F0NCkoc291cmNlUGl4ZWxBLnggKyBzb3VyY2VQaXhl
bEIueCAqICgxIC0gc291cmNlUGl4ZWxBLncpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS55ICsgc291cmNlUGl4ZWxCLnkgKiAoMSAtIHNv
dXJjZVBpeGVsQS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbEEueiArIHNvdXJjZVBpeGVsQi56ICogKDEgLSBzb3VyY2VQaXhlbEEudyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxB
LncgKyBzb3VyY2VQaXhlbEIudyAqICgxIC0gc291cmNlUGl4ZWxBLncpKTsKKworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsLncgPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLncsIDAuMCwgMS4wKTsK
KyAgICAgICAgZmxvYXQgcmVjID0gMSAvIGRlc3RpbmF0aW9uUGl4ZWwudzsKKyAgICAgICAgZGVz
dGluYXRpb25QaXhlbC54ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC54LCAwLjAsIDEuMCkgKiBy
ZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueSA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwu
eSwgMC4wLCAxLjApICogcmVjOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnogPSBjbGFtcChk
ZXN0aW5hdGlvblBpeGVsLnosIDAuMCwgMS4wKSAqIHJlYzsKKworICAgICAgICB3cml0ZV9pbWFn
ZWYoZGVzdGluYXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgx
KSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAgIH0KKworICAgIF9fa2VybmVsIHZvaWQgSW4oX193
cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCB4QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5QSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCB5QikKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmRBID0gKGludDIpIChnZXRfZ2xv
YmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkgKyB5QSk7CisgICAgICAgIGludDIgc291
cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEIsIGdldF9nbG9iYWxfaWQo
MSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEEgPSByZWFkX2ltYWdlZihzb3Vy
Y2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWxC
ID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29vcmRCKTsKKyAgICAgICAg
c291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEudzsKKyAgICAgICAgc291cmNlUGl4ZWxC
Lnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhl
bCA9IChmbG9hdDQpKHNvdXJjZVBpeGVsQS54ICogc291cmNlUGl4ZWxCLncsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxBLnkgKiBzb3VyY2VQ
aXhlbEIudywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VQaXhlbEEueiAqIHNvdXJjZVBpeGVsQi53LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS53ICogc291cmNlUGl4ZWxCLncpOworCisgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWwudyA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwudywgMC4wLCAx
LjApOworICAgICAgICBmbG9hdCByZWMgPSAxIC8gZGVzdGluYXRpb25QaXhlbC53OworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsLnggPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLngsIDAuMCwgMS4w
KSAqIHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC55ID0gY2xhbXAoZGVzdGluYXRpb25Q
aXhlbC55LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueiA9IGNs
YW1wKGRlc3RpbmF0aW9uUGl4ZWwueiwgMC4wLCAxLjApICogcmVjOworCisgICAgICAgIHdyaXRl
X2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFs
X2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7CisgICAgfQorCisgICAgX19rZXJuZWwgdm9pZCBP
dXQoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB4QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5QSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCB5QikKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmRBID0gKGludDIpIChn
ZXRfZ2xvYmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkgKyB5QSk7CisgICAgICAgIGlu
dDIgc291cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEIsIGdldF9nbG9i
YWxfaWQoMSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEEgPSByZWFkX2ltYWdl
Zihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAgICAgICBmbG9hdDQgc291cmNl
UGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29vcmRCKTsKKyAg
ICAgICAgc291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEudzsKKyAgICAgICAgc291cmNl
UGl4ZWxCLnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAgICBmbG9hdDQgZGVzdGluYXRp
b25QaXhlbCA9IChmbG9hdDQpKHNvdXJjZVBpeGVsQS54ICogKDEgLSBzb3VyY2VQaXhlbEIudyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGl4ZWxB
LnkgKiAoMSAtIHNvdXJjZVBpeGVsQi53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2VQaXhlbEEueiAqICgxIC0gc291cmNlUGl4ZWxCLncpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS53ICog
KDEgLSBzb3VyY2VQaXhlbEIudykpOworCisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwudyA9IGNs
YW1wKGRlc3RpbmF0aW9uUGl4ZWwudywgMC4wLCAxLjApOworICAgICAgICBmbG9hdCByZWMgPSAx
IC8gZGVzdGluYXRpb25QaXhlbC53OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnggPSBjbGFt
cChkZXN0aW5hdGlvblBpeGVsLngsIDAuMCwgMS4wKSAqIHJlYzsKKyAgICAgICAgZGVzdGluYXRp
b25QaXhlbC55ID0gY2xhbXAoZGVzdGluYXRpb25QaXhlbC55LCAwLjAsIDEuMCkgKiByZWM7Cisg
ICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwueiA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueiwgMC4w
LCAxLjApICogcmVjOworCisgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIp
IChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7
CisgICAgfQorCisgICAgX19rZXJuZWwgdm9pZCBBdG9wKF9fd3JpdGVfb25seSBpbWFnZTJkX3Qg
ZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2Uy
ZF90IHNvdXJjZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1hZ2Uy
ZF90IHNvdXJjZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeEEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgeUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgeEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeUIpCisgICAgeworICAgICAg
ICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHhBLCBnZXRf
Z2xvYmFsX2lkKDEpICsgeUEpOworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkQiA9IChpbnQyKSAo
Z2V0X2dsb2JhbF9pZCgwKSArIHhCLCBnZXRfZ2xvYmFsX2lkKDEpICsgeUIpOworICAgICAgICBm
bG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNl
Q29vcmRBKTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRfaW1hZ2VmKHNvdXJj
ZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQik7CisgICAgICAgIHNvdXJjZVBpeGVsQS54eXogKj0g
c291cmNlUGl4ZWxBLnc7CisgICAgICAgIHNvdXJjZVBpeGVsQi54eXogKj0gc291cmNlUGl4ZWxC
Lnc7CisKKyAgICAgICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSAoZmxvYXQ0KShzb3VyY2VQ
aXhlbEEueCAqIHNvdXJjZVBpeGVsQi53ICsgc291cmNlUGl4ZWxCLnggKiAoMSAtIHNvdXJjZVBp
eGVsQS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VQaXhlbEEueSAqIHNvdXJjZVBpeGVsQi53ICsgc291cmNlUGl4ZWxCLnkgKiAoMSAtIHNvdXJj
ZVBpeGVsQS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
b3VyY2VQaXhlbEEueiAqIHNvdXJjZVBpeGVsQi53ICsgc291cmNlUGl4ZWxCLnogKiAoMSAtIHNv
dXJjZVBpeGVsQS53KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VQaXhlbEEudyAqIHNvdXJjZVBpeGVsQi53ICsgc291cmNlUGl4ZWxCLncgKiAoMSAt
IHNvdXJjZVBpeGVsQS53KSk7CisKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC53ID0gY2xhbXAo
ZGVzdGluYXRpb25QaXhlbC53LCAwLjAsIDEuMCk7CisgICAgICAgIGZsb2F0IHJlYyA9IChkZXN0
aW5hdGlvblBpeGVsLncgPT0gMCkgPyAxLjAgOiAgMS4wIC8gZGVzdGluYXRpb25QaXhlbC53Owor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsLnggPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLngsIDAu
MCwgMS4wKSAqIHJlYzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC55ID0gY2xhbXAoZGVzdGlu
YXRpb25QaXhlbC55LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwu
eiA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueiwgMC4wLCAxLjApICogcmVjOworCisgICAgICAg
IHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRf
Z2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7CisgICAgfQorCisgICAgX19rZXJuZWwg
dm9pZCBYb3IoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB4QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5
QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4QiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB5QikKKyAgICB7CisgICAgICAgIGludDIgc291cmNlQ29vcmRBID0gKGlu
dDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEEsIGdldF9nbG9iYWxfaWQoMSkgKyB5QSk7CisgICAg
ICAgIGludDIgc291cmNlQ29vcmRCID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeEIsIGdl
dF9nbG9iYWxfaWQoMSkgKyB5Qik7CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbEEgPSByZWFk
X2ltYWdlZihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOworICAgICAgICBmbG9hdDQg
c291cmNlUGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29vcmRC
KTsKKyAgICAgICAgc291cmNlUGl4ZWxBLnh5eiAqPSBzb3VyY2VQaXhlbEEudzsKKyAgICAgICAg
c291cmNlUGl4ZWxCLnh5eiAqPSBzb3VyY2VQaXhlbEIudzsKKworICAgICAgICBmbG9hdDQgZGVz
dGluYXRpb25QaXhlbCA9IChmbG9hdDQpKHNvdXJjZVBpeGVsQS54ICogKDEgLSBzb3VyY2VQaXhl
bEIudykgKyBzb3VyY2VQaXhlbEIueCAqICgxIC0gc291cmNlUGl4ZWxBLncpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS55ICogKDEgLSBz
b3VyY2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIueSAqICgxIC0gc291cmNlUGl4ZWxBLncpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsQS56
ICogKDEgLSBzb3VyY2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIueiAqICgxIC0gc291cmNlUGl4
ZWxBLncpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZVBpeGVsQS53ICogKDEgLSBzb3VyY2VQaXhlbEIudykgKyBzb3VyY2VQaXhlbEIudyAqICgxIC0g
c291cmNlUGl4ZWxBLncpKTsKKworICAgICAgICBkZXN0aW5hdGlvblBpeGVsLncgPSBjbGFtcChk
ZXN0aW5hdGlvblBpeGVsLncsIDAuMCwgMS4wKTsKKyAgICAgICAgZmxvYXQgcmVjID0gMSAvIGRl
c3RpbmF0aW9uUGl4ZWwudzsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbC54ID0gY2xhbXAoZGVz
dGluYXRpb25QaXhlbC54LCAwLjAsIDEuMCkgKiByZWM7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4
ZWwueSA9IGNsYW1wKGRlc3RpbmF0aW9uUGl4ZWwueSwgMC4wLCAxLjApICogcmVjOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsLnogPSBjbGFtcChkZXN0aW5hdGlvblBpeGVsLnosIDAuMCwgMS4w
KSAqIHJlYzsKKworICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKSAoZ2V0
X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOworICAg
IH0KKworKTsKKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFQ29t
cG9zaXRlKCkKK3sKKyAgICBpZiAoIW1fZmVDb21wb3NpdGVQcm9ncmFtKSB7CisgICAgICAgIG1f
ZmVDb21wb3NpdGVQcm9ncmFtID0gY29tcGlsZVByb2dyYW0oRkVDb21wb3NpdGVLZXJuZWxQcm9n
cmFtKTsKKyAgICAgICAgQVNTRVJUKG1fZmVDb21wb3NpdGVQcm9ncmFtKTsKKworICAgICAgICBt
X2ZlQXJpdGhtZXRpYyA9IGtlcm5lbEJ5TmFtZShtX2ZlQ29tcG9zaXRlUHJvZ3JhbSwgIkFyaXRo
bWV0aWMiKTsKKyAgICAgICAgQVNTRVJUKG1fZmVBcml0aG1ldGljKTsKKyAgICAgICAgbV9mZU92
ZXIgPSBrZXJuZWxCeU5hbWUobV9mZUNvbXBvc2l0ZVByb2dyYW0sICJPdmVyIik7CisgICAgICAg
IEFTU0VSVChtX2ZlT3Zlcik7CisgICAgICAgIG1fZmVJbiA9IGtlcm5lbEJ5TmFtZShtX2ZlQ29t
cG9zaXRlUHJvZ3JhbSwgIkluIik7CisgICAgICAgIEFTU0VSVChtX2ZlSW4pOworICAgICAgICBt
X2ZlT3V0ID0ga2VybmVsQnlOYW1lKG1fZmVDb21wb3NpdGVQcm9ncmFtLCAiT3V0Iik7CisgICAg
ICAgIEFTU0VSVChtX2ZlT3V0KTsKKyAgICAgICAgbV9mZUF0b3AgPSBrZXJuZWxCeU5hbWUobV9m
ZUNvbXBvc2l0ZVByb2dyYW0sICJBdG9wIik7CisgICAgICAgIEFTU0VSVChtX2ZlQXRvcCk7Cisg
ICAgICAgIG1fZmVYb3IgPSBrZXJuZWxCeU5hbWUobV9mZUNvbXBvc2l0ZVByb2dyYW0sICJYb3Ii
KTsKKyAgICAgICAgQVNTRVJUKG1fZmVYb3IpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgRmls
dGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRUNvbXBvc2l0ZShjbF9tZW0gZGVzdGluYXRpb24sIElu
dFNpemUgZGVzdGluYXRpb25TaXplLCBjbF9tZW0gc291cmNlQSwgY2xfbWVtIHNvdXJjZUIsIEZs
b2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEsIEZsb2F0UG9pbnQgcmVsYXRpdmVTb3Vy
Y2VMb2NhdGlvbkIsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0LCBpbnQg
bW9kZSkKK3sKKyAgICBjbF9rZXJuZWwgY29tcG9zaXRlTW9kZTsKKworICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAg
Y29tcG9zaXRlTW9kZSA9IG1fZmVBcml0aG1ldGljOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2Zl
T3ZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoK
KyAgICAgICAgY29tcG9zaXRlTW9kZSA9IG1fZmVJbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2Zl
T3V0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6
CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBtX2ZlQXRvcDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgIGNvbXBvc2l0ZU1vZGUgPSBt
X2ZlWG9yOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjb21wb3NpdGVN
b2RlID0gbV9mZU92ZXI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0IHhBID0g
cmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEueCgpOworICAgIGZsb2F0IHlBID0gcmVsYXRpdmVTb3Vy
Y2VMb2NhdGlvbkEueSgpOworCisgICAgZmxvYXQgeEIgPSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9u
Qi54KCk7CisgICAgZmxvYXQgeUIgPSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQi55KCk7CisKKyAg
ICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIGNvbXBvc2l0ZU1vZGUsIGRlc3RpbmF0aW9uU2l6ZS53
aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVu
dChkZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUEpOworICAgIGtl
cm5lbC5hZGRBcmd1bWVudChzb3VyY2VCKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoeEEpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudCh5QSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHhCKTsK
KyAgICBrZXJuZWwuYWRkQXJndW1lbnQoeUIpOworICAgIGlmIChtb2RlID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUMpIHsKKyAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGsxKTsK
KyAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGsyKTsKKyAgICAgICAga2VybmVsLmFkZEFyZ3Vt
ZW50KGszKTsKKyAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGs0KTsKKyAgICB9CisgICAga2Vy
bmVsLnJ1bigpOworCit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlPcGVuQ0wo
KQoreworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGNvbnRleHQtPmNvbXBpbGVGRUNvbXBvc2l0ZSgpOworCisgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGNsX21lbSBzb3VyY2VBID0gaW4tPmFzT3Bl
bkNMSW1hZ2UoKTsKKworICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Cisg
ICAgY2xfbWVtIHNvdXJjZUIgPSBpbjItPmFzT3BlbkNMSW1hZ2UoKTsKKworICAgIGNsX21lbSBk
ZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7CisKKyAgICBGbG9hdFBvaW50
IHJlbGF0aXZlU291cmNlTG9jYXRpb25BKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9u
KCkpOworICAgIHJlbGF0aXZlU291cmNlTG9jYXRpb25BLnNldFgoYWJzb2x1dGVQYWludFJlY3Qo
KS54KCkgLSByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQS54KCkpOworICAgIHJlbGF0aXZlU291cmNl
TG9jYXRpb25BLnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZUxv
Y2F0aW9uQS55KCkpOworCisgICAgRmxvYXRQb2ludCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uQihp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7CisgICAgcmVsYXRpdmVTb3VyY2VM
b2NhdGlvbkIuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlTG9j
YXRpb25CLngoKSk7CisgICAgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkIuc2V0WShhYnNvbHV0ZVBh
aW50UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291cmNlTG9jYXRpb25CLnkoKSk7CisKKyAgICBjb250
ZXh0LT5hcHBseUZFQ29tcG9zaXRlKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSwgc291cmNlQSwgc291cmNlQiwgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbkEsIHJlbGF0aXZl
U291cmNlTG9jYXRpb25CLCBtX2sxLCBtX2syLCBtX2szLCBtX2s0LCBtX3R5cGUpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVDb252b2x2ZU1hdHJp
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9P
cGVuQ0xGRUNvbnZvbHZlTWF0cml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYTFhMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTAs
MCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVu
ZUBpbmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVS
UykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisjaW5j
bHVkZSAiT3BlbkNMQ29udGV4dC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUg
PGZzdHJlYW0+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBQUk9HUkFNX1NUUihTcmMp
ICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogRkVDb252b2x2ZU1hdHJpeEtlcm5lbFBy
b2dyYW0gPQorUFJPR1JBTV9TVFIoCitfX2tlcm5lbCB2b2lkIENvbnZvbHZlTWF0cml4KF9fd3Jp
dGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3Vy
Y2UsIF9fY29uc3RhbnQgZmxvYXQgKmtlcm5lbE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQga2VybmVsU2l6ZVdpZHRoLCBpbnQga2VybmVsU2l6ZUhlaWdodCwgaW50IGtl
cm5lbE9mZnNldFgsIGludCBrZXJuZWxPZmZzZXRZLCBmbG9hdCBkaXZpc29yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGJpYXMsIHNhbXBsZXJfdCBzYW1wbGVyKQoreworICAg
IGludCBYQ29vcmQgPSBnZXRfZ2xvYmFsX2lkKDApIC0ga2VybmVsT2Zmc2V0WDsKKyAgICBpbnQg
WUNvb3JkID0gZ2V0X2dsb2JhbF9pZCgxKSAtIGtlcm5lbE9mZnNldFk7CisgICAgZmxvYXQ0IHRv
dGFscyA9IChmbG9hdDQpKDAsMCwwLDApOworICAgIGludCBrZXJuZWxJbmRleCA9IGtlcm5lbFNp
emVXaWR0aCAqIGtlcm5lbFNpemVIZWlnaHQgLSAxOworICAgIGZvcihpbnQgeSA9IDA7IHkgPCBr
ZXJuZWxTaXplSGVpZ2h0OyArK3kpIHsKKyAgICAgICBmb3IoaW50IHggPSAwOyB4IDwga2VybmVs
U2l6ZVdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsID0gcmVhZF9p
bWFnZWYoc291cmNlLCBzYW1wbGVyLCAoaW50MikoWENvb3JkICsgeCwgWUNvb3JkICsgeSkpOwor
ICAgICAgICAgICBzb3VyY2VQaXhlbC54enkgKj0gc291cmNlUGl4ZWwudzsKKyAgICAgICAgICAg
dG90YWxzICs9IHNvdXJjZVBpeGVsICoga2VybmVsTWF0cml4W2tlcm5lbEluZGV4XTsKKyAgICAg
ICAgICAgLS1rZXJuZWxJbmRleDsKKyAgICAgICB9CisgICAgfQorICAgIHRvdGFscyA9IHRvdGFs
cyAvIGRpdmlzb3IgKyBiaWFzOworICAgIHRvdGFscy53ID0gY2xhbXAodG90YWxzLncsIDAuMGYs
IDEuMGYpOworICAgIHRvdGFscy54eXogPSBjbGFtcCh0b3RhbHMueHl6LCAwLjBmLCB0b3RhbHMu
dykgLyB0b3RhbHMudzsKKyAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShnZXRf
Z2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgdG90YWxzKTsKK30KKworX19rZXJuZWwg
dm9pZCBDb252b2x2ZU1hdHJpeEFscGhhKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRp
b24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2UsIF9fY29uc3RhbnQgZmxvYXQgKmtlcm5l
bE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtlcm5lbFNpemVX
aWR0aCwgaW50IGtlcm5lbFNpemVIZWlnaHQsIGludCBrZXJuZWxPZmZzZXRYLCBpbnQga2VybmVs
T2Zmc2V0WSwgZmxvYXQgZGl2aXNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgYmlhcywgc2FtcGxlcl90IHNhbXBsZXIpCit7CisgICAgaW50IFhDb29yZCA9IGdldF9n
bG9iYWxfaWQoMCkgLSBrZXJuZWxPZmZzZXRYOworICAgIGludCBZQ29vcmQgPSBnZXRfZ2xvYmFs
X2lkKDEpIC0ga2VybmVsT2Zmc2V0WTsKKyAgICBmbG9hdDQgdG90YWxzID0gKGZsb2F0NCkoMCww
LDAsMCk7CisgICAgaW50IGtlcm5lbEluZGV4ID0ga2VybmVsU2l6ZVdpZHRoICoga2VybmVsU2l6
ZUhlaWdodCAtIDE7CisgICAgZm9yKGludCB5ID0gMDsgeSA8IGtlcm5lbFNpemVIZWlnaHQ7ICsr
eSkgeworICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCBrZXJuZWxTaXplV2lkdGg7ICsreCkgewor
ICAgICAgICAgICBmbG9hdDQgc291cmNlUGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBs
ZXIsIChpbnQyKShYQ29vcmQgKyB4LCBZQ29vcmQgKyB5KSk7CisgICAgICAgICAgIHRvdGFscy54
eXogKz0gc291cmNlUGl4ZWwueHl6ICoga2VybmVsTWF0cml4W2tlcm5lbEluZGV4XTsKKyAgICAg
ICAgICAgLS1rZXJuZWxJbmRleDsKKyAgICAgICB9CisgICAgfQorICAgIGZsb2F0NCBhbHBoYSA9
IHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxlciwgKGludDIpKGdldF9nbG9iYWxfaWQoMCksIGdl
dF9nbG9iYWxfaWQoMSkpKTsKKyAgICB0b3RhbHMueHl6ID0gY2xhbXAodG90YWxzLnh5eiAvIGRp
dmlzb3IgKyBiaWFzLCAwLjBmLCAxLjBmKTsKKyAgICB0b3RhbHMudyA9IGFscGhhLnc7CisgICAg
d3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2ds
b2JhbF9pZCgxKSksIHRvdGFscyk7Cit9CispOworCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb21waWxlRkVDb252b2x2ZU1hdHJpeCgpCit7CisKKyAgICBpZiAoIW1fRkVDb252
b2x2ZU1hdHJpeCkgeworICAgICAgICBtX0ZFQ29udm9sdmVNYXRyaXhQcm9ncmFtID0gY29tcGls
ZVByb2dyYW0oRkVDb252b2x2ZU1hdHJpeEtlcm5lbFByb2dyYW0pOworICAgICAgICBBU1NFUlQo
bV9GRUNvbnZvbHZlTWF0cml4UHJvZ3JhbSk7CisgICAgICAgIG1fRkVDb252b2x2ZU1hdHJpeCA9
IGtlcm5lbEJ5TmFtZShtX0ZFQ29udm9sdmVNYXRyaXhQcm9ncmFtLCAiQ29udm9sdmVNYXRyaXgi
KTsKKyAgICAgICAgQVNTRVJUKG1fRkVDb252b2x2ZU1hdHJpeCk7CisgICAgICAgIG1fRkVDb252
b2x2ZU1hdHJpeEFscGhhID0ga2VybmVsQnlOYW1lKG1fRkVDb252b2x2ZU1hdHJpeFByb2dyYW0s
ICJDb252b2x2ZU1hdHJpeEFscGhhIik7CisgICAgICAgIEFTU0VSVChtX0ZFQ29udm9sdmVNYXRy
aXhBbHBoYSk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjph
cHBseUZFQ29udm9sdmVNYXRyaXgoY2xfbWVtIGRlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0
aW9uU2l6ZSwgY2xfbWVtIHNvdXJjZSwgSW50U2l6ZSBrZXJuZWxTaXplLCBjbF9tZW0ga2VybmVs
TWF0cml4LCBpbnQgZWRnZU1vZGUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIEludFBvaW50
IHRhcmdldE9mZnNldCwgYm9vbCBwcmVzZXJ2ZUFscGhhKQoreworICAgIGNsX3NhbXBsZXIgc2Ft
cGxlcjsKKworICAgIHN3aXRjaCAoZWRnZU1vZGUpIHsKKyAgICBjYXNlIEVER0VNT0RFX0RVUExJ
Q0FURToKKyAgICAgICAgc2FtcGxlciA9IGNsQ3JlYXRlU2FtcGxlcihkZXZpY2VDb250ZXh0KCks
IENMX0ZBTFNFLCBDTF9BRERSRVNTX1JFUEVBVCwgQ0xfRklMVEVSX05FQVJFU1QsIDApOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAgIHNhbXBsZXIgPSBj
bENyZWF0ZVNhbXBsZXIoZGV2aWNlQ29udGV4dCgpLCBDTF9GQUxTRSwgQ0xfQUREUkVTU19DTEFN
UF9UT19FREdFLCBDTF9GSUxURVJfTkVBUkVTVCwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHNhbXBsZXIgPSBjbENyZWF0ZVNhbXBsZXIoZGV2aWNlQ29udGV4dCgp
LCBDTF9GQUxTRSwgQ0xfQUREUkVTU19OT05FLCBDTF9GSUxURVJfTkVBUkVTVCwgMCk7CisgICAg
fQorCisgICAgaW50IGtlcm5lbE9mZnNldFggPSB0YXJnZXRPZmZzZXQueCgpOworICAgIGludCBr
ZXJuZWxPZmZzZXRZID0gdGFyZ2V0T2Zmc2V0LnkoKTsKKworICAgIGludCBrZXJuZWxTaXplV2lk
dGggPSBrZXJuZWxTaXplLndpZHRoKCk7CisgICAgaW50IGtlcm5lbFNpemVIZWlnaHQgPSBrZXJu
ZWxTaXplLmhlaWdodCgpOworCisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBwcmVzZXJ2ZUFs
cGhhID8gbV9GRUNvbnZvbHZlTWF0cml4QWxwaGEgOiBtX0ZFQ29udm9sdmVNYXRyaXgsIGRlc3Rp
bmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOworICAgIGtlcm5l
bC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJj
ZSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGtlcm5lbE1hdHJpeCk7CisgICAga2VybmVsLmFk
ZEFyZ3VtZW50KGtlcm5lbFNpemVXaWR0aCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGtlcm5l
bFNpemVIZWlnaHQpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChrZXJuZWxPZmZzZXRYKTsKKyAg
ICBrZXJuZWwuYWRkQXJndW1lbnQoa2VybmVsT2Zmc2V0WSk7CisgICAga2VybmVsLmFkZEFyZ3Vt
ZW50KGRpdmlzb3IpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChiaWFzKTsKKyAgICBrZXJuZWwu
YWRkQXJndW1lbnQoc2FtcGxlcik7CisgICAga2VybmVsLnJ1bigpOworfQorCitib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRP
cGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb250ZXh0LT5jb21waWxl
RkVDb252b2x2ZU1hdHJpeCgpOworCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOworCisgICAgY2xfbWVtIHNvdXJjZSA9IGluLT5hc09wZW5DTEltYWdlKCk7CisgICAgY2xf
bWVtIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoKTsKKworICAgIGNsX21l
bSBrZXJuZWxNYXRyaXggPSBjb250ZXh0LT51cGxvYWRCdWZmZXIoY29udGV4dCwgbV9rZXJuZWxN
YXRyaXguZGF0YSgpLCBzaXplb2YoZmxvYXQpICogbV9rZXJuZWxTaXplLndpZHRoKCkgKiBtX2tl
cm5lbFNpemUuaGVpZ2h0KCkpOworCisgICAgY29udGV4dC0+YXBwbHlGRUNvbnZvbHZlTWF0cml4
KGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlLCBtX2tlcm5l
bFNpemUsIGtlcm5lbE1hdHJpeCwgbV9lZGdlTW9kZSwgbV9kaXZpc29yLCBtX2JpYXMsIG1fdGFy
Z2V0T2Zmc2V0LCBtX3ByZXNlcnZlQWxwaGEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFC
TEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUZsb29kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY5YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVGbG9vZC5j
cHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVu
ZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJM
RShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKyNpbmNs
dWRlICJPcGVuQ0xDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIFBS
T0dSQU1fU1RSKFNyYykgI1NyYworI2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIoU3Jj
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVGbG9vZDo6cGxhdGZvcm1BcHBseU9w
ZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY2xfbWVtIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VSZXN1
bHQoKTsKKworICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENv
bG9yKCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKKworICAgIGNvbnRleHQtPkZpbGwoZGVzdGlu
YXRpb24sIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpLCBjb2xvcik7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJ
TFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRUltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFSW1hZ2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzZkMTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9P
cGVuQ0xGRUltYWdlLmNwcApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisKKyNpbmNsdWRlICJP
cGVuQ0xDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgorI2luY2x1ZGUgIlNWR0Zp
bHRlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjZGVmaW5lIFBST0dSQU1fU1RS
KFNyYykgI1NyYworI2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIoU3JjKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7
CisgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1
bHQoYXNQcmVtdWx0aXBsaWVkSW1hZ2UoYWJzb2x1dGVQYWludFJlY3QoKSktPmRhdGEoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVNZXJnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xG
RU1lcmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQyYzg2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9PcGVuQ0wvT3BlbkNMRkVNZXJnZS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNp
bmNsdWRlICJGRU1lcmdlLmgiCisjaW5jbHVkZSAiT3BlbkNMQ29udGV4dC5oIgorCisjZGVmaW5l
IFBST0dSQU1fU1RSKFNyYykgI1NyYworI2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIo
U3JjKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBGRU1lcmdl
S2VybmVsUHJvZ3JhbSA9CitQUk9HUkFNX1NUUigKKyAgICBfX2tlcm5lbCB2b2lkIE1lcmdlKF9f
d3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
X19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCB4LAorICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgIHNhbXBsZXJfdCBzYW1wbGVyKQorICAgIHsKKyAgICAgICAgaW50
MiBzb3VyY2VDb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSArIHgsIGdldF9nbG9iYWxf
aWQoMSkgKyB5KTsKKyAgICAgICAgZmxvYXQ0IHNvdXJjZVBpeGVsID0gcmVhZF9pbWFnZWYoc291
cmNlLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7CisgICAgICAgIGlmKHNvdXJjZUNvb3JkLnggPj0g
MCAmJiBzb3VyY2VDb29yZC55ID49IDAgJiYgc291cmNlQ29vcmQueCA8IHdpZHRoICYmIHNvdXJj
ZUNvb3JkLnkgPCBoZWlnaHQpCisgICAgICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24s
IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIHNvdXJjZVBpeGVs
KTsKKyAgICB9CisKKyk7CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBp
bGVGRU1lcmdlKCkKK3sKKyAgICBpZiAoIW1fRkVNZXJnZVByb2dyYW0pIHsKKyAgICAgICAgbV9G
RU1lcmdlUHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKEZFTWVyZ2VLZXJuZWxQcm9ncmFtKTsKKyAg
ICAgICAgQVNTRVJUKG1fRkVNZXJnZVByb2dyYW0pOworICAgICAgICBtX0ZFTWVyZ2UgPSBrZXJu
ZWxCeU5hbWUobV9GRU1lcmdlUHJvZ3JhbSwgIk1lcmdlIik7CisgICAgICAgIEFTU0VSVChtX0ZF
TWVyZ2UpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBw
bHlGRU1lcmdlKGNsX21lbSBkZXN0aW5hdGlvbiwgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsIGNs
X21lbSBzb3VyY2UsIEZsb2F0UmVjdCByZWxhdGl2ZVNvdXJjZVJlY3QpCit7CisgICAgZmxvYXQg
eCA9IHJlbGF0aXZlU291cmNlUmVjdC54KCk7CisgICAgZmxvYXQgeSA9IHJlbGF0aXZlU291cmNl
UmVjdC55KCk7CisgICAgZmxvYXQgd2lkdGggPSByZWxhdGl2ZVNvdXJjZVJlY3Qud2lkdGgoKTsK
KyAgICBmbG9hdCBoZWlnaHQgPSByZWxhdGl2ZVNvdXJjZVJlY3QuaGVpZ2h0KCk7CisKKyAgICBj
bF9zYW1wbGVyIHNhbXBsZXIgPSBjbENyZWF0ZVNhbXBsZXIoZGV2aWNlQ29udGV4dCgpLCBDTF9G
QUxTRSwgQ0xfQUREUkVTU19DTEFNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHJvdW5kKHgpID09IHggJiYgcm91bmQoeSkgPT0geSkgPyBDTF9GSUxURVJfTkVB
UkVTVCA6IENMX0ZJTFRFUl9MSU5FQVIsIDApOworCisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlz
LCBtX0ZFTWVyZ2UsIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVp
Z2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisgICAga2VybmVs
LmFkZEFyZ3VtZW50KHNvdXJjZSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHgpOworICAgIGtl
cm5lbC5hZGRBcmd1bWVudCh5KTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQod2lkdGgpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChoZWlnaHQpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzYW1w
bGVyKTsKKyAgICBrZXJuZWwucnVuKCk7CisKK30KKworYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFw
cGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVy
Q29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb250ZXh0LT5jb21waWxlRkVNZXJnZSgpOworCisgICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CisgICAgQVNTRVJUKHNpemUgPiAw
KTsKKworICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7
CisgICAgY2xfbWVtIHNvdXJjZTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSl7CisgICAgICAgIGluID0gaW5wdXRFZmZlY3Qo
aSk7CisgICAgICAgIHNvdXJjZSA9IGluLT5hc09wZW5DTEltYWdlKCk7CisgICAgICAgIEZsb2F0
UmVjdCByZWxhdGl2ZVNvdXJjZVJlY3QoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgICAg
ICByZWxhdGl2ZVNvdXJjZVJlY3Quc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0
aXZlU291cmNlUmVjdC54KCkpOworICAgICAgICByZWxhdGl2ZVNvdXJjZVJlY3Quc2V0WShhYnNv
bHV0ZVBhaW50UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291cmNlUmVjdC55KCkpOworCisgICAgICAg
IGNvbnRleHQtPmFwcGx5RkVNZXJnZShkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCksIHNvdXJjZSwgcmVsYXRpdmVTb3VyY2VSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVNb3JwaG9sb2d5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZF
TW9ycGhvbG9neS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3MjNh
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvT3BlbkNML09wZW5DTEZFTW9ycGhvbG9neS5jcHAKQEAgLTAsMCArMSwxNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQu
aHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9Q
RU5DTCkKKyNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKKyNpbmNsdWRlICJPcGVuQ0xDb250ZXh0
LmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKworI2RlZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMK
KyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKwordXNpbmcgc3RkOjptaW47
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIEZFTW9ycGhvbG9n
eUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCisgICAgX19rZXJuZWwgdm9pZCBNb3JwaG9s
b2d5RGlsYXRlKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlLAorICAgICAgICAgICAgICAg
ICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgIGludCByYWRpdXNYLAorICAgICAgICAgICAgICAgICAgICAgIGlu
dCByYWRpdXNZLAorICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJfdCBzYW1wbGVyKQorICAg
IHsKKyAgICAgICAgaW50IGNvb3JkWCA9IGdldF9nbG9iYWxfaWQoMCk7CisgICAgICAgIGludCBj
b29yZFkgPSBnZXRfZ2xvYmFsX2lkKDEpOworCisgICAgICAgIGludCBzdGFydFggPSBtYXgoMCwg
Y29vcmRYIC0gcmFkaXVzWCk7CisgICAgICAgIGludCBlbmRYID0gbWluKHdpZHRoLCBjb29yZFgg
KyByYWRpdXNYKTsKKworICAgICAgICBpbnQgc3RhcnRZID0gbWF4KDAsIGNvb3JkWSAtIHJhZGl1
c1kpOworICAgICAgICBpbnQgZW5kWSA9IG1pbihoZWlnaHQsIGNvb3JkWSArIHJhZGl1c1kpOwor
CisgICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbCA9IChmbG9hdDQpKDAsMCwwLDApOworCisgICAg
ICAgIGZvcihpbnQgeSA9IHN0YXJ0WTsgeSA8PSBlbmRZOyB5KyspCisgICAgICAgICAgICBmb3Io
aW50IHggPSBzdGFydFg7IHggPD0gZW5kWDsgeCsrKXsKKyAgICAgICAgICAgICAgICBzb3VyY2VQ
aXhlbCA9IG1heChzb3VyY2VQaXhlbCAsIHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxlciwgKGlu
dDIpKHgsIHkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgd3JpdGVfaW1hZ2VmKGRlc3Rp
bmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIHNvdXJj
ZVBpeGVsKTsKKyAgICB9CisKKyAgICBfX2tlcm5lbCB2b2lkIE1vcnBob2xvZ3lFcm9kZShfX3dy
aXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgX19y
ZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICBpbnQgcmFkaXVzWCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXVzWSwKKyAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVyX3Qgc2FtcGxlcikKKyAgICB7CisgICAgICAgIGlu
dCBjb29yZFggPSBnZXRfZ2xvYmFsX2lkKDApOworICAgICAgICBpbnQgY29vcmRZID0gZ2V0X2ds
b2JhbF9pZCgxKTsKKworICAgICAgICBpbnQgc3RhcnRYID0gbWF4KDAsIGNvb3JkWCAtIHJhZGl1
c1gpOworICAgICAgICBpbnQgZW5kWCA9IG1pbih3aWR0aCAtIDEsIGNvb3JkWCArIHJhZGl1c1gp
OworCisgICAgICAgIGludCBzdGFydFkgPSBtYXgoMCwgY29vcmRZIC0gcmFkaXVzWSk7CisgICAg
ICAgIGludCBlbmRZID0gbWluKGhlaWdodCAtIDEsIGNvb3JkWSArIHJhZGl1c1kpOworCisgICAg
ICAgIGZsb2F0NCBzb3VyY2VQaXhlbCA9IChmbG9hdDQpKDI1NiwyNTYsMjU2LDI1Nik7CisKKyAg
ICAgICAgZm9yKGludCB5ID0gc3RhcnRZOyB5IDw9IGVuZFk7IHkrKykKKyAgICAgICAgICAgIGZv
cihpbnQgeCA9IHN0YXJ0WDsgeCA8PSBlbmRYOyB4KyspeworICAgICAgICAgICAgICAgIHNvdXJj
ZVBpeGVsID0gbWluKHNvdXJjZVBpeGVsICwgcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCAo
aW50MikoeCwgeSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB3cml0ZV9pbWFnZWYoZGVz
dGluYXRpb24sIChpbnQyKShnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgc291
cmNlUGl4ZWwpOworICAgIH0KKworKTsKKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5D
TDo6Y29tcGlsZUZFTW9ycGhvbG9neSgpCit7CisgICAgaWYgKCFtX2ZlTW9ycGhvbG9neURpbGF0
ZSAmJiAhbV9mZU1vcnBob2xvZ3lFcm9kZSkgeworICAgICAgICBtX2ZlTW9ycGhvbG9neVByb2dy
YW0gPSBjb21waWxlUHJvZ3JhbShGRU1vcnBob2xvZ3lLZXJuZWxQcm9ncmFtKTsKKyAgICAgICAg
QVNTRVJUKG1fZmVNb3JwaG9sb2d5UHJvZ3JhbSk7CisgICAgICAgIG1fZmVNb3JwaG9sb2d5RGls
YXRlID0ga2VybmVsQnlOYW1lKG1fZmVNb3JwaG9sb2d5UHJvZ3JhbSwgIk1vcnBob2xvZ3lEaWxh
dGUiKTsKKyAgICAgICAgQVNTRVJUKG1fZmVNb3JwaG9sb2d5RGlsYXRlKTsKKyAgICAgICAgbV9m
ZU1vcnBob2xvZ3lFcm9kZSA9IGtlcm5lbEJ5TmFtZShtX2ZlTW9ycGhvbG9neVByb2dyYW0sICJN
b3JwaG9sb2d5RXJvZGUiKTsKKyAgICAgICAgQVNTRVJUKG1fZmVNb3JwaG9sb2d5RXJvZGUpOwor
ICAgIH0KK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRU1vcnBo
b2xvZ3koY2xfbWVtIGRlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0aW9uU2l6ZSwgY2xfbWVt
IHNvdXJjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1ks
IGludCB0eXBlKQoreworCisgICAgY2xfc2FtcGxlciBzYW1wbGVyID0gY2xDcmVhdGVTYW1wbGVy
KGRldmljZUNvbnRleHQoKSwgQ0xfRkFMU0UsIENMX0FERFJFU1NfTk9ORSwgQ0xfRklMVEVSX05F
QVJFU1QsIDApOworCisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCAodHlwZSA9PSAxKSA/IG1f
ZmVNb3JwaG9sb2d5RXJvZGUgOiBtX2ZlTW9ycGhvbG9neURpbGF0ZSwgZGVzdGluYXRpb25TaXpl
LndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoZGVzdGluYXRpb24pOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudCh3aWR0aCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGhlaWdo
dCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJhZGl1c1gpOworICAgIGtlcm5lbC5hZGRBcmd1
bWVudChyYWRpdXNZKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc2FtcGxlcik7CisgICAga2Vy
bmVsLnJ1bigpOworfQorCitib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseU9wZW5DTCgp
Cit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVu
Q0w6OmNvbnRleHQoKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY29udGV4dC0+Y29tcGlsZUZFTW9ycGhvbG9neSgpOworCisgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGNsX21lbSBzb3VyY2UgPSBpbi0+YXNPcGVu
Q0xJbWFnZSgpOworICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVz
dWx0KCk7CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBp
ZiAobV9yYWRpdXNYIDw9IDAgfHwgbV9yYWRpdXNZIDw9IDApIHsKKyAgICAgICAgY29udGV4dC0+
RmlsbChkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIENvbG9yKDAsMCww
LDApKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRmlsdGVyKiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
aW50IHdpZHRoID0gZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0g
ZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCk7CisgICAgaW50IHJhZGl1c1ggPSBtaW4od2lkdGgg
LSAxLCBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxl
KG1fcmFkaXVzWCkpKSk7CisgICAgaW50IHJhZGl1c1kgPSBtaW4oaGVpZ2h0IC0gMSwgc3RhdGlj
X2Nhc3Q8aW50PihmbG9vcmYoZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9yYWRpdXNZKSkp
KTsKKworICAgIGNvbnRleHQtPmFwcGx5RkVNb3JwaG9sb2d5KGRlc3RpbmF0aW9uLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXNYLCByYWRp
dXNZLCBtX3R5cGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wv
T3BlbkNMRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9PcGVuQ0wvT3BlbkNMRkVPZmZzZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmNmOTQyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRU9mZnNldC5jcHAKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGlu
Zi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKSAm
JiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCisjaW5jbHVkZSAiT3BlbkNM
Q29udGV4dC5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisKKyNkZWZpbmUgUFJPR1JBTV9TVFIoU3Jj
KSAjU3JjCisjZGVmaW5lIFBST0dSQU0oU3JjKSBQUk9HUkFNX1NUUihTcmMpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIEZFT2Zmc2V0S2VybmVsUHJvZ3JhbSA9
CitQUk9HUkFNX1NUUigKKyAgICBfX2tlcm5lbCB2b2lkIE9mZnNldChfX3dyaXRlX29ubHkgaW1h
Z2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29ubHkgaW1h
Z2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAorICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcl90IHNh
bXBsZXIpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkID0gKGludDIpIChnZXRfZ2xv
YmFsX2lkKDApICsgeCAsIGdldF9nbG9iYWxfaWQoMSkgKyB5KTsKKyAgICAgICAgZmxvYXQ0IHNv
dXJjZVBpeGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7Cisg
ICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIpKGdldF9nbG9iYWxfaWQoMCks
IGdldF9nbG9iYWxfaWQoMSkpLCBzb3VyY2VQaXhlbCk7CisgICAgfQorCispOworCitpbmxpbmUg
dm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVPZmZzZXQoKQoreworICAgIGlmICgh
bV9mZU9mZnNldCkgeworICAgICAgICBtX2ZlT2Zmc2V0UHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFt
KEZFT2Zmc2V0S2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX2ZlT2Zmc2V0UHJvZ3Jh
bSk7CisgICAgICAgIG1fZmVPZmZzZXQgPSBrZXJuZWxCeU5hbWUobV9mZU9mZnNldFByb2dyYW0s
ICJPZmZzZXQiKTsKKyAgICAgICAgQVNTRVJUKG1fZmVPZmZzZXQpOworICAgIH0KK30KKworaW5s
aW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRU9mZnNldChjbF9tZW0gZGVzdGlu
YXRpb24sIEludFNpemUgZGVzdGluYXRpb25TaXplLCBjbF9tZW0gc291cmNlLCBGbG9hdFBvaW50
IHJlbGF0aXZlU291cmNlTG9jYXRpb24pCit7CisKKyAgICBmbG9hdCB4ID0gcmVsYXRpdmVTb3Vy
Y2VMb2NhdGlvbi54KCk7CisgICAgZmxvYXQgeSA9IHJlbGF0aXZlU291cmNlTG9jYXRpb24ueSgp
OworCisgICAgY2xfc2FtcGxlciBzYW1wbGVyID0gY2xDcmVhdGVTYW1wbGVyKGRldmljZUNvbnRl
eHQoKSwgQ0xfRkFMU0UsIENMX0FERFJFU1NfQ0xBTVBfVE9fRURHRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvdW5kKHgpID09IHggJiYgcm91bmQoeSkgPT0g
eSkgPyBDTF9GSUxURVJfTkVBUkVTVCA6IENMX0ZJTFRFUl9MSU5FQVIsIDApOworCisgICAgUnVu
S2VybmVsIGtlcm5lbCh0aGlzLCBtX2ZlT2Zmc2V0LCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwg
ZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGlu
YXRpb24pOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAgIGtlcm5lbC5hZGRB
cmd1bWVudCh4KTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoeSk7CisgICAga2VybmVsLmFkZEFy
Z3VtZW50KHNhbXBsZXIpOworICAgIGtlcm5lbC5ydW4oKTsKK30KKworYm9vbCBGRU9mZnNldDo6
cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4
dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29udGV4dC0+Y29tcGlsZUZFT2Zmc2V0KCk7
CisKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgY2xfbWVtIHNv
dXJjZSA9IGluLT5hc09wZW5DTEltYWdlKCk7CisgICAgY2xfbWVtIGRlc3RpbmF0aW9uID0gY3Jl
YXRlT3BlbkNMSW1hZ2VSZXN1bHQoKTsKKworICAgIEZsb2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VM
b2NhdGlvbihpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICByZWxhdGl2
ZVNvdXJjZUxvY2F0aW9uLnNldFgoYWJzb2x1dGVQYWludFJlY3QoKS54KCkgLSAocmVsYXRpdmVT
b3VyY2VMb2NhdGlvbi54KCkgKyBmaWx0ZXIoKS0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCkp
KTsKKyAgICByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55
KCkgLSAocmVsYXRpdmVTb3VyY2VMb2NhdGlvbi55KCkgKyBmaWx0ZXIoKS0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKSk7CisgICAgY29udGV4dC0+YXBwbHlGRU9mZnNldChkZXN0aW5hdGlvbiwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNvdXJjZSxyZWxhdGl2ZVNvdXJjZUxvY2F0aW9u
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291
cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9P
cGVuQ0wvT3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMmVlN2U5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlQWxwaGEuY3BwCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVu
ZUBpbmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVS
UykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiT3BlbkNMQ29u
dGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlQWxwaGE6OnBsYXRm
b3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBG
aWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7
CisgICAgaWYgKCFmaWx0ZXItPnNvdXJjZUltYWdlKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLT5zb3VyY2VJ
bWFnZSgpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0g
c291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCks
c291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBkc3Qg
PSBzb3VyY2VJbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBlbmQgPSBkc3Qg
KyBzb3VyY2VJbWFnZURhdGEtPmxlbmd0aCgpOworICAgIHdoaWxlIChkc3QgPCBlbmQpIHsKKyAg
ICAgICAgZHN0WzBdID0gMDsKKyAgICAgICAgZHN0WzFdID0gMDsKKyAgICAgICAgZHN0WzJdID0g
MDsKKyAgICAgICAgZHN0ICs9IDQ7CisgICAgfQorCisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1
bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFC
TEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlR3JhcGhpYy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyYzIxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNM
L09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2lu
Y2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgorI2luY2x1ZGUgIk9wZW5DTENvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQorewor
ICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b250ZXh0KCk7CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaWYgKCFmaWx0ZXItPnNv
dXJjZUltYWdlKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLT5zb3VyY2VJbWFnZSgpOworICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLHNvdXJjZUltYWdlLT5pbnRlcm5h
bFNpemUoKSkpOworCisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VEYXRh
LT5kYXRhKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3Bl
bkNMRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
T3BlbkNML09wZW5DTEZFVGlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOWM0YzQwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFVGlsZS5jcHAKQEAgLTAsMCArMSwxNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVn
ZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxF
KE9QRU5DTCkKKyNpbmNsdWRlICJGRVRpbGUuaCIKKyNpbmNsdWRlICJPcGVuQ0xDb250ZXh0Lmgi
CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIFBST0dSQU1fU1RSKFNyYykgI1NyYwor
I2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIoU3JjKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBGRVRpbGVLZXJuZWxQcm9ncmFtID0KK1BST0dSQU1f
U1RSKAorICAgIF9fa2VybmVsIHZvaWQgVGlsaW5nKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVz
dGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291
cmNlLAorICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAor
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICBz
YW1wbGVyX3Qgc2FtcGxlcikKKyAgICB7CisgICAgICAgIGludCBjb29yZFggPSBnZXRfZ2xvYmFs
X2lkKDApOworICAgICAgICBpbnQgY29vcmRZID0gZ2V0X2dsb2JhbF9pZCgxKTsKKworICAgICAg
ICBpbnQyIHVubm9ybWFsaXplZENvb3JkID0gKGludDIpKGNvb3JkWCxjb29yZFkpOworICAgICAg
ICBmbG9hdDIgbm9ybWFsaXplZENvb3JkID0gKGZsb2F0MikoKGNvb3JkWCArIDAuNWYgKyB4KSAv
IHdpZHRoLCAoY29vcmRZICsgMC41ZiArIHkpIC8gaGVpZ2h0KTsKKworICAgICAgICBmbG9hdDQg
c291cmNlUGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIG5vcm1hbGl6ZWRDb29y
ZCk7CisgICAgICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgdW5ub3JtYWxpemVkQ29vcmQs
IHNvdXJjZVBpeGVsKTsKKyAgICB9CisKKworCitfX2tlcm5lbCB2b2lkIFRpbGVCdWlsZGVyKF9f
d3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHNvdXJjZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBz
b3VyY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJfdCBzYW1wbGVy
KQoreworCisgICAgaW50MiBjb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSAsIGdldF9n
bG9iYWxfaWQoMSkgKTsKKyAgICBmbG9hdDQgc291cmNlUGl4ZWwgPSAoZmxvYXQ0KSgxLDEsMSwx
KTsKKworICAgIGlmKGNvb3JkLnggPD0gc291cmNlV2lkdGggJiYgY29vcmQueSA8PSBzb3VyY2VI
ZWlnaHQpCisgICAgICAgIHNvdXJjZVBpeGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVy
LCBjb29yZCk7CisKKyAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIGNvb3JkLCBzb3VyY2VQ
aXhlbCk7Cit9CisKKyk7CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBp
bGVGRVRpbGUoKQoreworICAgIGlmICghbV9mZVRpbGUpIHsKKyAgICAgICAgbV9mZVRpbGVQcm9n
cmFtID0gY29tcGlsZVByb2dyYW0oRkVUaWxlS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VS
VChtX2ZlVGlsZVByb2dyYW0pOworCisgICAgICAgIG1fZmVUaWxlID0ga2VybmVsQnlOYW1lKG1f
ZmVUaWxlUHJvZ3JhbSwgIlRpbGluZyIpOworICAgICAgICBBU1NFUlQobV9mZVRpbGUpOworCisg
ICAgICAgIG1fVGlsZUJ1aWxkZXIgPSBrZXJuZWxCeU5hbWUobV9mZVRpbGVQcm9ncmFtLCAiVGls
ZUJ1aWxkZXIiKTsKKworICAgIH0KK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5D
TDo6YXBwbHlGRVRpbGluZyhjbF9tZW0gZGVzdGluYXRpb24sIEludFNpemUgZGVzdGluYXRpb25T
aXplLCBjbF9tZW0gc291cmNlLCBGbG9hdFJlY3Qgc291cmNlUmVjdCwgRmxvYXRQb2ludCByZWxh
dGl2ZVNvdXJjZUxvY2F0aW9uKQoreworICAgIGNsX3NhbXBsZXIgc2FtcGxlciA9IGNsQ3JlYXRl
U2FtcGxlcihkZXZpY2VDb250ZXh0KCksIENMX1RSVUUsIENMX0FERFJFU1NfUkVQRUFULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xfRklMVEVSX0xJTkVBUiwg
MCk7CisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX2ZlVGlsZSwgZGVzdGluYXRpb25TaXpl
LndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVsLmFkZEFyZ3Vt
ZW50KGRlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNlKTsKKyAgICBr
ZXJuZWwuYWRkQXJndW1lbnQoc291cmNlUmVjdC53aWR0aCgpKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoc291cmNlUmVjdC5oZWlnaHQoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0
aXZlU291cmNlTG9jYXRpb24ueCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVT
b3VyY2VMb2NhdGlvbi55KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzYW1wbGVyKTsKKyAg
ICBrZXJuZWwucnVuKCk7CisKK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6
YXBwbHlGRVRpbGVCdWlsZGVyKGNsX21lbSBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uU2l6ZSwgY2xfbWVtIHNvdXJjZSwgRmxvYXRTaXplIHNvdXJjZVNpemUpCit7CisgICAgY2xf
c2FtcGxlciBzYW1wbGVyID0gY2xDcmVhdGVTYW1wbGVyKGRldmljZUNvbnRleHQoKSwgQ0xfRkFM
U0UsIENMX0FERFJFU1NfTk9ORSwgQ0xfRklMVEVSX0xJTkVBUiwgMCk7CisKKyAgICBSdW5LZXJu
ZWwga2VybmVsMih0aGlzLCBtX1RpbGVCdWlsZGVyLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwg
ZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKyAgICBrZXJuZWwyLmFkZEFyZ3VtZW50KGRlc3Rp
bmF0aW9uKTsKKyAgICBrZXJuZWwyLmFkZEFyZ3VtZW50KHNvdXJjZSk7CisgICAga2VybmVsMi5h
ZGRBcmd1bWVudChzb3VyY2VTaXplLndpZHRoKCkpOworICAgIGtlcm5lbDIuYWRkQXJndW1lbnQo
c291cmNlU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVsMi5hZGRBcmd1bWVudChzYW1wbGVyKTsK
KyAgICBrZXJuZWwyLnJ1bigpOworCit9CisKK2Jvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4
dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb250ZXh0LT5jb21waWxlRkVUaWxlKCk7CisKKyAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgY2xfbWVtIHNvdXJjZSA9IGluLT5hc09wZW5D
TEltYWdlKCk7CisgICAgY2xfbWVtIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VSZXN1
bHQoKTsKKworICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7CisK
KyAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNl
SW5wdXQpIHsKKyAgICAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICAg
ICAgdGlsZVJlY3QgPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAgICAgICB0aWxlUmVjdC5z
Y2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgY2xfbWVtIHRpbGUgPSBjb250ZXh0
LT5jcmVhdGVPcGVuQ0xJbWFnZSh0aWxlUmVjdC5zaXplKCkpOworCisgICAgY29udGV4dC0+YXBw
bHlGRVRpbGVCdWlsZGVyKHRpbGUsIHRpbGVSZWN0LCBzb3VyY2UsIGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSk7CisKKyAgICBGbG9hdFBvaW50IHJlbGF0aXZlU291cmNlTG9jYXRpb24o
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7CisgICAgcmVsYXRpdmVTb3VyY2VM
b2NhdGlvbi5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVsYXRpdmVTb3VyY2VMb2Nh
dGlvbi54KCkpOworICAgIHJlbGF0aXZlU291cmNlTG9jYXRpb24uc2V0WShhYnNvbHV0ZVBhaW50
UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291cmNlTG9jYXRpb24ueSgpKTsKKworICAgIGNvbnRleHQt
PmFwcGx5RkVUaWxpbmcoZGVzdGluYXRpb24sIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpLCB0
aWxlLCB0aWxlUmVjdCwgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVUdXJidWxl
bmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDY2NGE0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9P
cGVuQ0wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQor
I2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgorI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5jcHAiCisj
aW5jbHVkZSAiT3BlbkNMQ29udGV4dC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1
ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBQUk9HUkFNX1NUUihT
cmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogRkVUdXJidWxlbmNlS2VybmVsUHJv
Z3JhbSA9CitQUk9HUkFNX1NUUigKK19fY29uc3RhbnQgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2
OworX19jb25zdGFudCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitfX2NvbnN0YW50IGludCBzX2Js
b2NrTWFzayA9IDI1NTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgbm9pc2VQb3NpdGlv
bkludGVnZXJWYWx1ZTsKKyAgICBmbG9hdCBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZTsKK30g
Tm9pc2U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IHdpZHRoOworICAgIGludCB3cmFw
WDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCB3cmFwWTsKK30gU3RpdGNoRGF0YTsKKworZmxv
YXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQoreworICAg
IHJldHVybiBhICsgdCAqIChiIC0gYSk7Cit9CisKK2Zsb2F0IG5vaXNlMkQoX19jb25zdGFudCBm
bG9hdCAqY29tcG9uZW50LCBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBTdGl0Y2hE
YXRhIHN0aXRjaERhdGEsIGZsb2F0IG5vaXNlVmVjdG9yWCwgZmxvYXQgbm9pc2VWZWN0b3JZLCBp
bnQgc3RpdGNoVGlsZXMpCit7CisgICAgTm9pc2Ugbm9pc2VYOworICAgIG5vaXNlWC5ub2lzZVBv
c2l0aW9uSW50ZWdlclZhbHVlID0gKGludCkobm9pc2VWZWN0b3JYICsgc19wZXJsaW5Ob2lzZSk7
CisgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9yWCAr
IHNfcGVybGluTm9pc2UpIC0gbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7CisgICAg
Tm9pc2Ugbm9pc2VZOworICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID0gKGlu
dCkobm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSk7CisgICAgbm9pc2VZLm5vaXNlUG9zaXRp
b25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9yWSArIHNfcGVybGluTm9pc2UpIC0gbm9pc2VZ
Lm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7CisKKyAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVz
dCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAoc3RpdGNoVGlsZXMpIHsKKyAg
ICAgICAgaWYgKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEu
d3JhcFgpCisgICAgICAgICAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBz
dGl0Y2hEYXRhLndpZHRoOworICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2Vy
VmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWCAtIDEpCisgICAgICAgICAgICBub2lzZVgubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYg
KG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEud3JhcFkpCisg
ICAgICAgICAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRh
LmhlaWdodDsKKyAgICAgICAgaWYgKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49
IHN0aXRjaERhdGEud3JhcFkgLSAxKQorICAgICAgICAgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25J
bnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS5oZWlnaHQgLSAxOworICAgIH0KKworICAgIG5vaXNl
WC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5u
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIGludCBsYXR0aWNl
SW5kZXggPSBsYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVd
OworICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gbGF0dGljZVNlbGVjdG9yWyhub2lzZVgubm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDEpICYgc19ibG9ja01hc2tdOworCisgICAgZmxvYXQg
c3ggPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBub2lzZVgubm9pc2VQb3Np
dGlvbkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9u
VmFsdWUpOworICAgIGZsb2F0IHN5ID0gbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVl
ICogbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogKDMgLSAyICogbm9pc2VZLm5v
aXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKKworICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZy
b20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2VFbGVtZW50LgorICAgIGludCB0ZW1wID0gbGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBmbG9hdCB1ID0g
bm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyXSAr
IG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMiAr
IDFdOworICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBmbG9hdCB2ID0gKG5vaXNlWC5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyXSArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFdOwor
ICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKKyAgICB0ZW1wID0g
bGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdl
clZhbHVlICsgMV07CisgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAq
IGNvbXBvbmVudFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVl
IC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICB0ZW1wID0gbGF0dGljZVNlbGVj
dG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAr
IDFdOworICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBj
b21wb25lbnRbdGVtcCAqIDJdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAt
IDEpICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07CisgICAgZmxvYXQgYiA9IGxpbmVhckludGVy
cG9sYXRpb24oc3gsIHUsIHYpOworICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBh
LCBiKTsKK30KKworX19rZXJuZWwgdm9pZCBUdXJidWxlbmNlKF9fd3JpdGVfb25seSBpbWFnZTJk
X3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdGFudCBmbG9h
dCAqdHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3RhbnQgZmxvYXQg
KnJlZENvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0YW50IGZsb2F0
ICpncmVlbkNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0YW50IGZs
b2F0ICpibHVlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3RhbnQg
ZmxvYXQgKmFscGhhQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Rh
bnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19wcml2
YXRlIGludCBvZmZzZXRYLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJpdmF0ZSBpbnQg
b2Zmc2V0WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByaXZhdGUgaW50IHRpbGVXaWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByaXZhdGUgaW50IHRpbGVIZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgX19wcml2YXRlIGZsb2F0IGJhc2VGcmVxdWVuY3lYLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJpdmF0ZSBmbG9hdCBiYXNlRnJlcXVlbmN5WSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByaXZhdGUgaW50IHN0aXRjaFRpbGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcHJpdmF0ZSBpbnQgbnVtT2N0YXZlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3ByaXZhdGUgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgX19wcml2YXRlIGludCBmaWx0ZXJfaGVpZ2h0KQoreworICAgIFN0aXRjaERhdGEgc3Rp
dGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRoID0gMDsKKyAgICBzdGl0Y2hEYXRhLndyYXBY
ID0gMDsKKyAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IDA7CisgICAgc3RpdGNoRGF0YS53cmFwWSA9
IDA7CisgICAgLy8gQWRqdXN0IHRoZSBiYXNlIGZyZXF1ZW5jaWVzIGlmIG5lY2Vzc2FyeSBmb3Ig
c3RpdGNoaW5nLgorICAgIGlmIChzdGl0Y2hUaWxlcykgeworICAgICAgICAvLyBXaGVuIHN0aXRj
aGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAor
ICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgor
ICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1
ZW5jeSA9IGZsb29yKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAg
ICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsKHRpbGVXaWR0aCAqIGJhc2VGcmVx
dWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxk
IGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorICAgICAgICAgICAg
aWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VG
cmVxdWVuY3lYKQorICAgICAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gaGln
aEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKKyAg
ICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVIZWlnaHQgKiBiYXNlRnJl
cXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9
IGNlaWwodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7CisgICAgICAg
ICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8g
YmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBsb3dGcmVx
dWVuY3k7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkg
PSBoaWdoRnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIC8vIFNldCB1cCBUdXJidWxlbmNl
SW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgorICAgICAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmQo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0g
c19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIHN0aXRjaERhdGEuaGVp
Z2h0ID0gcm91bmQodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICAgICAgc3RpdGNo
RGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKKyAgICB9Cisg
ICAgZmxvYXQ0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IChmbG9hdDQpKDAsMCwwLDApOwor
ICAgIGZsb2F0IHggPSAoZ2V0X2dsb2JhbF9pZCgwKSArIG9mZnNldFgpICogYmFzZUZyZXF1ZW5j
eVg7CisgICAgZmxvYXQgeSA9IChnZXRfZ2xvYmFsX2lkKDEpICsgb2Zmc2V0WSkgKiBiYXNlRnJl
cXVlbmN5WTsKKworICAgIGZsb2F0IG5vaXNlVmVjdG9yWCA9IHRyYW5zZm9ybVswXSAqIHggKyB0
cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdOworICAgIGZsb2F0IG5vaXNlVmVjdG9yWSA9
IHRyYW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNmb3JtWzVdOworCisg
ICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG51
bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmICh0eXBlID09IDEpIHsKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC54ICs9IG5vaXNlMkQocmVkQ29tcG9uZW50LCBs
YXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBz
dGl0Y2hUaWxlcykgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dC55ICs9IG5vaXNlMkQoZ3JlZW5Db21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0
YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvOworICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LnogKz0gbm9pc2UyRChibHVlQ29tcG9u
ZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0
b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdC53ICs9IG5vaXNlMkQoYWxwaGFDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlv
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
LnggKz0gZmFicyhub2lzZTJEKHJlZENvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hE
YXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpKSAvIHJhdGlvOwor
ICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LnkgKz0gZmFicyhub2lzZTJEKGdy
ZWVuQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwg
bm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQueiArPSBmYWJzKG5vaXNlMkQoYmx1ZUNvbXBvbmVudCwgbGF0dGlj
ZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNo
VGlsZXMpKSAvIHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0Lncg
Kz0gZmFicyhub2lzZTJEKGFscGhhQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERh
dGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykpIC8gcmF0aW87Cisg
ICAgICAgIH0KKyAgICAgICAgbm9pc2VWZWN0b3JYICo9IDI7CisgICAgICAgIG5vaXNlVmVjdG9y
WSAqPSAyOworICAgICAgICByYXRpbyAqPSAyOworICAgICAgICBpZiAoc3RpdGNoVGlsZXMpIHsK
KyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxp
bk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgLy8g
YWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCisg
ICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7CisgICAgICAgICAgICBzdGl0Y2hEYXRh
LndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAg
ICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkg
PSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAodHlwZSA9PSAxKQorICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
PSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKKyAgICAvLyBDbGFtcCBy
ZXN1bHQKKyAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSBjbGFtcCh0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQsIDAuMGYsIDEuMGYpOworCisgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9u
LCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCk7Cit9CispOworCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNM
Ojpjb21waWxlRkVUdXJidWxlbmNlKCkKK3sKKworICAgIGlmICghbV9GRVR1cmJ1bGVuY2UpIHsK
KyAgICAgICAgbV9GRVR1cmJ1bGVuY2VQcm9ncmFtID0gY29tcGlsZVByb2dyYW0oRkVUdXJidWxl
bmNlS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX0ZFVHVyYnVsZW5jZVByb2dyYW0p
OworICAgICAgICBtX0ZFVHVyYnVsZW5jZSA9IGtlcm5lbEJ5TmFtZShtX0ZFVHVyYnVsZW5jZVBy
b2dyYW0sICJUdXJidWxlbmNlIik7CisgICAgICAgIEFTU0VSVChtX0ZFVHVyYnVsZW5jZSk7Cisg
ICAgfQorfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVs
ZW5jZShjbF9tZW0gZGVzdGluYXRpb24sIEludFNpemUgZGVzdGluYXRpb25TaXplLCBjbF9tZW0g
dHJhbnNmb3JtSGFuZGxlLCBjbF9tZW0gcmVkQ29tcG9uZW50SGFuZGxlLCBjbF9tZW0gZ3JlZW5D
b21wb25lbnRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbF9tZW0gYmx1ZUNvbXBvbmVudEhhbmRsZSwgY2xfbWVtIGFscGhhQ29tcG9u
ZW50SGFuZGxlLCBjbF9tZW0gbGF0dGljZVNlbGVjdG9ySGFuZGxlLCBpbnQgb2Zmc2V0WCwgaW50
IG9mZnNldFksIGludCB0aWxlV2lkdGgsIGludCB0aWxlSGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzLCBpbnQgbnVtT2N0YXZlcywg
aW50IHR5cGUpCit7CisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX0ZFVHVyYnVsZW5jZSwg
ZGVzdGluYXRpb25TaXplLndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAg
a2VybmVsLmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQo
dHJhbnNmb3JtSGFuZGxlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVkQ29tcG9uZW50SGFu
ZGxlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZ3JlZW5Db21wb25lbnRIYW5kbGUpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChibHVlQ29tcG9uZW50SGFuZGxlKTsKKyAgICBrZXJuZWwuYWRk
QXJndW1lbnQoYWxwaGFDb21wb25lbnRIYW5kbGUpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChs
YXR0aWNlU2VsZWN0b3JIYW5kbGUpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZzZXRYKTsK
KyAgICBrZXJuZWwuYWRkQXJndW1lbnQob2Zmc2V0WSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50
KHRpbGVXaWR0aCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHRpbGVIZWlnaHQpOworICAgIGtl
cm5lbC5hZGRBcmd1bWVudChiYXNlRnJlcXVlbmN5WCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50
KGJhc2VGcmVxdWVuY3lZKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc3RpdGNoVGlsZXMpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudChudW1PY3RhdmVzKTsKKyAgICBrZXJuZWwuYWRkQXJndW1l
bnQodHlwZSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQo
KSk7CisgICAga2VybmVsLnJ1bigpOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1B
cHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRl
ckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnRleHQtPmNvbXBpbGVGRVR1cmJ1bGVuY2UoKTsKKworICAg
IGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7CisKKyAgICBQ
YWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgcm91bmRlZEludFNpemUoZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CisgICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7
CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJ0ZWRUcmFuc2Zvcm0gPSByZWludGVycHJldF9j
YXN0PFNWR0ZpbHRlcio+KGZpbHRlcigpKS0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnNlKCk7
CisgICAgZmxvYXQgdHJhbnNmb3JtQ29tcG9uZW50c1s2XSA9IHsgaW52ZXJ0ZWRUcmFuc2Zvcm0u
YSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5iKCksIGludmVydGVkVHJhbnNmb3JtLmMoKSwgaW52ZXJ0
ZWRUcmFuc2Zvcm0uZCgpLCBpbnZlcnRlZFRyYW5zZm9ybS5lKCksIGludmVydGVkVHJhbnNmb3Jt
LmYoKSB9OworCisgICAgY2xfbWVtIHRyYW5zZm9ybUhhbmRsZSA9IGNvbnRleHQtPnVwbG9hZEJ1
ZmZlcihjb250ZXh0LCB0cmFuc2Zvcm1Db21wb25lbnRzLCBzaXplb2YoZmxvYXQpICogNik7Cisg
ICAgY2xfbWVtIHJlZENvbXBvbmVudEhhbmRsZSA9IGNvbnRleHQtPnVwbG9hZEJ1ZmZlcihjb250
ZXh0LCBwYWludGluZ0RhdGEuZ3JhZGllbnQgKyAwLCBzaXplb2YoZmxvYXQpICogKDIgKiBzX2Js
b2NrU2l6ZSArIDIpICogMik7CisgICAgY2xfbWVtIGdyZWVuQ29tcG9uZW50SGFuZGxlID0gY29u
dGV4dC0+dXBsb2FkQnVmZmVyKGNvbnRleHQsIHBhaW50aW5nRGF0YS5ncmFkaWVudCArIDEsIHNp
emVvZihmbG9hdCkgKiAoMiAqIHNfYmxvY2tTaXplICsgMikgKiAyKTsKKyAgICBjbF9tZW0gYmx1
ZUNvbXBvbmVudEhhbmRsZSA9IGNvbnRleHQtPnVwbG9hZEJ1ZmZlcihjb250ZXh0LCBwYWludGlu
Z0RhdGEuZ3JhZGllbnQgKyAyLCBzaXplb2YoZmxvYXQpICogKDIgKiBzX2Jsb2NrU2l6ZSArIDIp
ICogMik7CisgICAgY2xfbWVtIGFscGhhQ29tcG9uZW50SGFuZGxlID0gY29udGV4dC0+dXBsb2Fk
QnVmZmVyKGNvbnRleHQsIHBhaW50aW5nRGF0YS5ncmFkaWVudCArIDMsIHNpemVvZihmbG9hdCkg
KiAoMiAqIHNfYmxvY2tTaXplICsgMikgKiAyKTsKKyAgICBjbF9tZW0gbGF0dGljZVNlbGVjdG9y
SGFuZGxlID0gY29udGV4dC0+dXBsb2FkQnVmZmVyKGNvbnRleHQsIHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3IsIHNpemVvZihpbnQpICogKDIgKiBzX2Jsb2NrU2l6ZSArIDIpKTsKKworICAg
IGNvbnRleHQtPmFwcGx5RkVUdXJidWxlbmNlKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSwgdHJhbnNmb3JtSGFuZGxlLCByZWRDb21wb25lbnRIYW5kbGUsIGdyZWVuQ29t
cG9uZW50SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVDb21wb25l
bnRIYW5kbGUsIGFscGhhQ29tcG9uZW50SGFuZGxlLCBsYXR0aWNlU2VsZWN0b3JIYW5kbGUsIGFi
c29sdXRlUGFpbnRSZWN0KCkueCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpLCBw
YWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKSwgbV9iYXNlRnJlcXVlbmN5WCwgbV9iYXNl
RnJlcXVlbmN5WSwgbV9zdGl0Y2hUaWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX251bU9jdGF2ZXMsIG1fdHlwZSk7CisKKyAgICBjbFJlbGVhc2VNZW1PYmplY3QodHJhbnNm
b3JtSGFuZGxlKTsKKyAgICBjbFJlbGVhc2VNZW1PYmplY3QocmVkQ29tcG9uZW50SGFuZGxlKTsK
KyAgICBjbFJlbGVhc2VNZW1PYmplY3QoZ3JlZW5Db21wb25lbnRIYW5kbGUpOworICAgIGNsUmVs
ZWFzZU1lbU9iamVjdChibHVlQ29tcG9uZW50SGFuZGxlKTsKKyAgICBjbFJlbGVhc2VNZW1PYmpl
Y3QoYWxwaGFDb21wb25lbnRIYW5kbGUpOworICAgIGNsUmVsZWFzZU1lbU9iamVjdChsYXR0aWNl
U2VsZWN0b3JIYW5kbGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVu
Q0wvU2FtcGxlcnRlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9PcGVuQ0wvU2FtcGxlcnRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjRjY2M1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9TYW1wbGVydGVzdC5jcHAKQEAgLTAsMCArMSwyMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1z
emVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5B
QkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorI2luY2x1ZGUgIk9wZW5DTENvbnRl
eHQuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorCisjZGVmaW5lIFBST0dSQU1fU1RSKFNyYykgI1Ny
YworI2RlZmluZSBQUk9HUkFNKFNyYykgUFJPR1JBTV9TVFIoU3JjKQorCitzdHJ1Y3QgQk1QSGVh
ZGVyIHsKKyAgdW5zaWduZWQgc2hvcnQgYmZUeXBlOworICB1bnNpZ25lZCBpbnQgYmZTaXplOwor
ICB1bnNpZ25lZCBzaG9ydCBiZlJlc2VydmVkMTsKKyAgdW5zaWduZWQgc2hvcnQgYmZSZXNlcnZl
ZDI7CisgIHVuc2lnbmVkIGludCBiZk9mZkJpdHM7CisKKyAgdW5zaWduZWQgaW50IGJpU2l6ZTsK
KyAgdW5zaWduZWQgaW50IGJpV2lkdGg7CisgIHVuc2lnbmVkIGludCBiaUhlaWdodDsKKyAgdW5z
aWduZWQgc2hvcnQgYmlQbGFuZXM7CisgIHVuc2lnbmVkIHNob3J0IGJpQml0Q291bnQ7CisgIHVu
c2lnbmVkIGludCBiaUNvbXByZXNzaW9uOworICB1bnNpZ25lZCBpbnQgYmlTaXplSW1hZ2U7Cisg
IHVuc2lnbmVkIGludCBiaVhQZWxzUGVyTWV0ZXI7CisgIHVuc2lnbmVkIGludCBiaVlQZWxzUGVy
TWV0ZXI7CisgIHVuc2lnbmVkIGludCBiaUNsclVzZWQ7CisgIHVuc2lnbmVkIGludCBiaUNscklt
cG9ydGFudDsKKyB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworIHN0YXRpYyB2b2lk
IGR1bXBBc0JNUChjb25zdCBjaGFyKiBmaWxlTmFtZSwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBwaXhlbHMsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3JjU2Nh
bmxpbmUpCisgeworICBCTVBIZWFkZXIqIGhlYWRlcjsKKyAgdW5zaWduZWQgY2hhciogc3JjOwor
ICB1bnNpZ25lZCBjaGFyKiBkc3Q7CisgIGludCBkc3RTY2FubGluZTsKKyAgaW50IHNpemUsIGks
IGo7CisgIEZJTEUqIGY7CisKKyAgZHN0U2NhbmxpbmUgPSAoKHdpZHRoICogMykgKyAzKSAmIH4z
OworICBzcmNTY2FubGluZSAqPSA0OworCisgIHNpemUgPSAoZHN0U2NhbmxpbmUgKiBoZWlnaHQp
ICsgc2l6ZW9mKEJNUEhlYWRlcik7CisgIGhlYWRlciA9IChCTVBIZWFkZXIqKWZhc3RNYWxsb2Mo
c2l6ZSk7CisgIGlmICghaGVhZGVyKQorICByZXR1cm47CisKKyAgZiA9IGZvcGVuKGZpbGVOYW1l
LCAidyIpOworICBpZiAoIWYpIHsKKyAgZmFzdEZyZWUoaGVhZGVyKTsKKyAgcmV0dXJuOworICB9
CisKKyAgbWVtc2V0KGhlYWRlciwgMCwgc2l6ZSk7CisgIGhlYWRlci0+YmZUeXBlID0gMHg0ZDQy
OworICBoZWFkZXItPmJmU2l6ZSA9IHNpemU7CisgIGhlYWRlci0+YmZPZmZCaXRzID0gc2l6ZW9m
KEJNUEhlYWRlcik7CisgIGhlYWRlci0+YmlTaXplID0gNDA7CisgIGhlYWRlci0+YmlXaWR0aCA9
IHdpZHRoOworICBoZWFkZXItPmJpSGVpZ2h0ID0gaGVpZ2h0OworICBoZWFkZXItPmJpUGxhbmVz
ID0gMTsKKyAgaGVhZGVyLT5iaUJpdENvdW50ID0gMjQ7CisgIHNpemUgLT0gc2l6ZW9mKEJNUEhl
YWRlcik7CisgIGhlYWRlci0+YmlTaXplSW1hZ2UgPSBzaXplOworCisgIGRzdCA9ICgodW5zaWdu
ZWQgY2hhciopaGVhZGVyKSArIHNpemVvZihCTVBIZWFkZXIpOworICBzcmMgPSBwaXhlbHMtPmRh
dGEoKSArICgoeSArIGhlaWdodCAtIDEpICogc3JjU2NhbmxpbmUpICsgeCAqIDQ7CisKKyAgZHN0
U2NhbmxpbmUgLT0gKHdpZHRoICogMyk7CisgIHNyY1NjYW5saW5lICs9ICh3aWR0aCAqIDQpOwor
ICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpIHsKKyAgZm9yIChqID0gMDsgaiA8IHdpZHRo
OyArK2opIHsKKyAgZHN0WzBdID0gc3JjWzJdOworICBkc3RbMV0gPSBzcmNbMV07CisgIGRzdFsy
XSA9IHNyY1swXTsKKyAgc3JjICs9IDQ7CisgIGRzdCArPSAzOworICB9CisgIGRzdCArPSBkc3RT
Y2FubGluZTsKKyAgc3JjIC09IHNyY1NjYW5saW5lOworICB9CisKKyAgZndyaXRlKGhlYWRlciwg
c2l6ZSwgMSwgZik7CisgIGZjbG9zZShmKTsKKyAgZmFzdEZyZWUoaGVhZGVyKTsKKyAgcHJpbnRm
KCInJXMnIHdyaXR0ZW5cbiIsIGZpbGVOYW1lKTsKKyAgZmZsdXNoKHN0ZG91dCk7Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIEZFT2Zmc2V0S2VybmVsUHJv
Z3JhbSA9CitQUk9HUkFNX1NUUigKKyAgICBfX2tlcm5lbCB2b2lkIE9mZnNldChfX3dyaXRlX29u
bHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgX19yZWFkX29u
bHkgaW1hZ2UyZF90IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4LAorICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxl
cl90IHNhbXBsZXIpCisgICAgeworICAgICAgICBpbnQyIHNvdXJjZUNvb3JkID0gKGludDIpIChn
ZXRfZ2xvYmFsX2lkKDApICsgeCAgLCBnZXRfZ2xvYmFsX2lkKDEpICsgeSk7CisgICAgICAgIGZs
b2F0NCBzb3VyY2VQaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxlciwgc291cmNlQ29v
cmQpOworICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShnZXRfZ2xvYmFs
X2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgc291cmNlUGl4ZWwpOworICAgIH0KKworKTsKKwor
aW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFT2Zmc2V0KCkKK3sKKyAg
ICBpZiAoIW1fZmVPZmZzZXQpIHsKKyAgICAgICAgbV9mZU9mZnNldFByb2dyYW0gPSBjb21waWxl
UHJvZ3JhbShGRU9mZnNldEtlcm5lbFByb2dyYW0pOworICAgICAgICBBU1NFUlQobV9mZU9mZnNl
dFByb2dyYW0pOworICAgICAgICBtX2ZlT2Zmc2V0ID0ga2VybmVsQnlOYW1lKG1fZmVPZmZzZXRQ
cm9ncmFtLCAiT2Zmc2V0Iik7CisgICAgICAgIEFTU0VSVChtX2ZlT2Zmc2V0KTsKKyAgICB9Cit9
CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVPZmZzZXQoY2xfbWVt
IGRlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0aW9uU2l6ZSwgY2xfbWVtIHNvdXJjZSwgRmxv
YXRQb2ludCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uKQoreworCisgICAgZmxvYXQgeCA9IHJlbGF0
aXZlU291cmNlTG9jYXRpb24ueCgpOworICAgIGZsb2F0IHkgPSByZWxhdGl2ZVNvdXJjZUxvY2F0
aW9uLnkoKTsKKworICAgIGNsX3NhbXBsZXIgc2FtcGxlciA9IGNsQ3JlYXRlU2FtcGxlcihkZXZp
Y2VDb250ZXh0KCksIENMX0ZBTFNFLCBDTF9BRERSRVNTX0NMQU1QLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDTF9GSUxURVJfTElORUFSLCAwKTsKKworICAgIFJ1
bktlcm5lbCBrZXJuZWwodGhpcywgbV9mZU9mZnNldCwgZGVzdGluYXRpb25TaXplLndpZHRoKCks
IGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGRlc3Rp
bmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNlKTsKKyAgICBrZXJuZWwuYWRk
QXJndW1lbnQoeCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHkpOworICAgIGtlcm5lbC5hZGRB
cmd1bWVudChzYW1wbGVyKTsKKyAgICBrZXJuZWwucnVuKCk7Cit9CisKK2Jvb2wgRkVPZmZzZXQ6
OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRl
eHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnRleHQtPmNvbXBpbGVGRU9mZnNldCgp
OworCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGNsX21lbSBz
b3VyY2UgPSBpbi0+YXNPcGVuQ0xJbWFnZSgpOworICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNy
ZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7CisKKyAgICBzaXplX3Qgb3JpZ2luWzNdID0geyAwLCAw
LCAwIH07CisgICAgc2l6ZV90IHJlZ2lvblszXSA9IHsgYWJzb2x1dGVQYWludFJlY3QoKS53aWR0
aCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpLCAxfTsKKworICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZGVzdGluYXRpb25QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OmNyZWF0ZShhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgp
LmhlaWdodCgpICogNCk7CisKKyAgICBjbEVucXVldWVSZWFkSW1hZ2UoY29udGV4dC0+Y29tbWFu
ZFF1ZXVlKCksIHNvdXJjZSwgQ0xfVFJVRSwgb3JpZ2luLCByZWdpb24sIDAsIDAsIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS0+ZGF0YSgpLCAwLCAwLCAwKTsKKworICAgIGR1bXBBc0JNUCgia2VwMy5i
bXAiLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIDAsIDAsIGFic29sdXRlUGFpbnRSZWN0KCkud2lk
dGgoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS53
aWR0aCgpKTsKKworICAgIGNsRW5xdWV1ZVJlYWRJbWFnZShjb250ZXh0LT5jb21tYW5kUXVldWUo
KSwgZGVzdGluYXRpb24sIENMX1RSVUUsIG9yaWdpbiwgcmVnaW9uLCAwLCAwLCBkZXN0aW5hdGlv
blBpeGVsQXJyYXktPmRhdGEoKSwgMCwgMCwgMCk7CisKKyAgICBkdW1wQXNCTVAoImtlcDQuYm1w
IiwgZGVzdGluYXRpb25QaXhlbEFycmF5LCAwLCAwLCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRo
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCksIGFic29sdXRlUGFpbnRSZWN0KCkud2lk
dGgoKSk7CisKKworICAgIEZsb2F0UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAvL3JlbGF0aXZlU291cmNlTG9jYXRp
b24uc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIChyZWxhdGl2ZVNvdXJjZUxvY2F0aW9u
LngoKSArIGZpbHRlcigpLT5hcHBseUhvcml6b250YWxTY2FsZShtX2R4KSkpOworICAgIC8vcmVs
YXRpdmVTb3VyY2VMb2NhdGlvbi5zZXRZKGFic29sdXRlUGFpbnRSZWN0KCkueSgpIC0gKHJlbGF0
aXZlU291cmNlTG9jYXRpb24ueSgpICsgZmlsdGVyKCktPmFwcGx5VmVydGljYWxTY2FsZShtX2R5
KSkpOworICAgIGNvbnRleHQtPmFwcGx5RkVPZmZzZXQoZGVzdGluYXRpb24sIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpLCBzb3VyY2UscmVsYXRpdmVTb3VyY2VMb2NhdGlvbik7CisKKyAgICBj
bEVucXVldWVSZWFkSW1hZ2UoY29udGV4dC0+Y29tbWFuZFF1ZXVlKCksIGRlc3RpbmF0aW9uLCBD
TF9UUlVFLCBvcmlnaW4sIHJlZ2lvbiwgMCwgMCwgZGVzdGluYXRpb25QaXhlbEFycmF5LT5kYXRh
KCksIDAsIDAsIDApOworCisgICAgZHVtcEFzQk1QKCJrZXA1LmJtcCIsIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgMCwgMCwgYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50
UmVjdCgpLmhlaWdodCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkpOworCisgICAvLyBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKworCisKKyAgICBkdW1wQXNCTVAoImtlcDcuYm1wIiwg
YXNJbWFnZUJ1ZmZlcigpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGFic29sdXRlUGFpbnRS
ZWN0KCkpLCAwLCAwLCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCksIGFic29sdXRlUGFpbnRS
ZWN0KCkuaGVpZ2h0KCksIGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSk7CisKKworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA5NjkxNmU5Li5i
MDIyMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0zMyw2ICszMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuaAppbmRleCBjN2U4MzNlLi4xODVlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApA
QCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
OworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVu
Q0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggZWU2
YTQ5ZC4uNzhhODBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTMwMiw5ICszMDIsMTYgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIEdyYXBoaWNzQ28KICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7CiAg
ICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKICNp
ZiAhVVNFKENHKQotICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVm
ZmVjdC0+YXNJbWFnZUJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlc3VsdEltYWdlKQotICAg
ICAgICAgICAgICAgIHJlc3VsdEltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKGxhc3RFZmZlY3Qt
PmNvbG9yU3BhY2UoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisjaWYgRU5BQkxFKE9QRU5DTCkK
KyAgICAgICAgY2xfbWVtIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+YXNPcGVuQ0xJbWFnZSgp
OworICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29udGV4dCgpOworICAgICAgICBpZiAocmVzdWx0SW1hZ2UgJiYgY29udGV4dCkKKyAg
ICAgICAgICAgIGNvbnRleHQtPk9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UocmVzdWx0SW1hZ2Us
IENvbG9yU3BhY2VEZXZpY2VSR0IsIGxhc3RFZmZlY3QtPmNvbG9yU3BhY2UoKSwgbGFzdEVmZmVj
dC0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisjZWxzZQorICAgICAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7CisgICAgICAgIGlmIChyZXN1
bHRJbWFnZSkKKyAgICAgICAgICAgIHJlc3VsdEltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKGxh
c3RFZmZlY3QtPmNvbG9yU3BhY2UoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisjZW5kaWYKICNl
bmRpZgogICAgICAgICB9CiAgICAgICAgIGZpbHRlckRhdGEtPmJ1aWxkZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4
IDViYWQ5NTAuLjc3MzU3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTM5LDYgKzM5LDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyKiwgRG9j
dW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>